【问题标题】:GLIb Array sort, how to sort?GLIb 数组排序,如何排序?
【发布时间】:2014-10-29 09:54:10
【问题描述】:

我尝试使用 GLib 的 GenericArraySlistList 进行排序。使用 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! 我的问题是排序 Array of int 谢谢!

【问题讨论】:

  • 您现在基本上已经问了三次次相同的问题。您应该回到第一个问题并对其进行编辑以显示您的进度或添加更多详细信息。多次询问同一个问题是不可行的。

标签: arrays sorting glib genie


【解决方案1】:

a.length - b.length 将按 length 而不是 contents 对字符串进行排序。如果你想要内容,请使用a.collate(b)

【讨论】:

    【解决方案2】:

    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, 
    
    */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多