GLIb数组排序,如何排序?
问题描述:
我试着用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 谢谢!
答
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,
*/
答
a.length - b.length
将长度不内容的字符串进行排序。如果你想要的内容,使用a.collate(b)
。
的可能重复的[\ [精灵/ VALA \]:如何使用自定义比较排序(http://*.com/questions/26572319/genie-vala-how-to-sort-using-a-custom-comparator) – 2014-10-29 11:36:56
你现在基本上提出了相同的问题*三次*。您应该回到第一个问题并对其进行编辑以显示您的进度或添加更多详细信息。多次询问相同的东西并不是要走的路。 – 2014-10-29 11:38:36