2014-10-29 104 views
0

我試着用GLib的GenericArray,Slist,List做一些排序。與sort_with_data排序按預期工作,但當我嘗試Glib的Array它不起作用,或者更確切地說,它做了一些不同的事情!GLIb數組排序,如何排序?

這是我對整數排序功能:

[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 謝謝!

+0

的可能重複的[\ [精靈/ VALA \]:如何使用自定義比較排序(http://stackoverflow.com/questions/26572319/genie-vala-how-to-sort-using-a-custom-comparator) – 2014-10-29 11:36:56

+3

你現在基本上提出了相同的問題*三次*。您應該回到第一個問題並對其進行編輯以顯示您的進度或添加更多詳細信息。多次詢問相同的東西並不是要走的路。 – 2014-10-29 11:38:36

回答

0

GenericArray的排序函數更容易編寫。 但Array的排序功能不同。

用於排序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, 

*/ 
1

a.length - b.length長度內容的字符串進行排序。如果你想要的內容,使用a.collate(b)