0

GLib のGenericArray, Slist, でソートを試みましたList。並べ替えはsort_with_data期待どおりに機能しますが、Glib を試してみるとArray、機能しないか、何か違うことが起こります。

これは整数のソート関数です:

[indent=4]

init
    var a = new Array of int
    for i in new array of int = {3, 2, 1, 5, 7}
        a.append_val (i)

    a.sort_with_data (my_func)
    for var i = 0 to (a.length - 1)
        stdout.printf ("%d, ", a.index (i))
    // 3, 2, 1, 5, 7, 
    stdout.putc ('\n')

    a.sort (my_func)
    for var i = 0 to (a.length - 1)
        stdout.printf ("%d, ", a.index (i))
    // 3, 2, 1, 5, 7, 

def my_func (a: int, b: int): int
    return a - b

出力は 3、2、1、5、7、

何が悪いのかわからない。Geeを使うように言わないでください。私の質問はint配列の並べ替え ですありがとう!

4

2 に答える 2

1

a.length - b.length文字列を内容ではなく長さでソートします。コンテンツが必要な場合は、 を使用してください。a.collate(b)

于 2014-10-29T10:27:12.623 に答える
0

GenericArray の sort 関数の方が書きやすいです。しかし、配列のソート機能は異なります。

int データの並べ替えと文字列データの並べ替えの例

[indent=4]

init
    var a = new Array of int
    var b = new array of int = {3, 8, 6, 5, 7, 4, 1, 2}
    a.append_vals (b, b.length)

    // sort_with_data
    a.sort_with_data ((CompareDataFunc) int_sort)
    stdout.puts ("sort_with_data:\n")

    for var i = 0 to (a.length - 1)
        stdout.printf ("%d, ", a.index (i))
    stdout.putc ('\n')

    // sort
    a.sort ((CompareFunc) int_sort)
    stdout.puts ("sort:\n")

    for var i = 0 to (a.length - 1)
        stdout.printf ("%d, ", a.index (i))

    stdout.puts ("\nsort string:\n")
    // sort string
    var S = new array of string = {
        "zee", "app", "april", "bana", "grap", "oliv", "lim", "apri"
    }

    var T = new Array of string
    T.append_vals (S, S.length)

    T.sort ((CompareFunc) str_sort)

    for var i = 0 to (T.length - 1)
        stdout.printf ("%s, ", T.index (i))

    // app, apri, bana, grap, lim, oliv, zee, 

def int_sort (a: int*, b: int*): int
    return *a - *b

def str_sort (a: char**, b: char**): int
    return strcmp ((string)(*a), (string)(*b))


/* ouput

sort_with_data:
1, 2, 3, 4, 5, 6, 7, 8, 
sort:
1, 2, 3, 4, 5, 6, 7, 8, 
sort string:
app, apri, april, bana, grap, lim, oliv, zee, 

*/
于 2015-07-13T11:21:59.290 に答える