【问题标题】:perl6 Best ways to sort array of arrays?perl6 对数组进行排序的最佳方法?
【发布时间】:2017-05-23 02:04:57
【问题描述】:

我需要对数组进行排序; .sort 方法似乎可以通过 默认。但是什么是按不同索引排序的好方法 内部数组?

要排序的数组是更大的数组:('mmddyy'格式的生日)

my @allRecords = [ [birthday1 firstName1 lastName1 [data1]
                   [birthday2 firstName2 lastName2 [data2] 
                   ...
                   [birthdayN firstNameN lastNameN [dataN] ];

@allRecords.sort by itself sorts by birthdays. 

按名字或姓氏或内部数组中的数据排序的更好方法是什么?

非常感谢!

【问题讨论】:

    标签: arrays sorting raku indices


    【解决方案1】:

    sort 方法takes a sub as optional argument。如果它的元数为 1,则使用返回值作为比较操作数;如果它的元数为 2,您可以通过返回 LessSameMore 之一来手动进行元素之间的比较。

    根据你的例子,我们可以像这样按名字排序:

    @allRecords.sort(*.[1]);
    

    我们可以通过像这样明确地进行单独比较来按姓氏,然后是名字,然后是生日来排序:

    @allRecords.sort(-> $a, $b {
        $a[2] cmp $b[2] || $a[1] cmp $b[1] || $a[0] cmp $b[0]
    });
    

    或通过转换操作数再次隐式:

    @allRecords.sort(*.[2...0]);
    

    转换生日条目以便我们首先按年份排序留给读者作为练习,但一种方法是添加类似

    .comb(2).list.rotate(-1).join
    

    在适当的地方。

    【讨论】:

    • 您可以像这样按姓、名、生日排序:@a.sort: *[2...0]
    • 还有2个问题:(1)*.[1]有什么区别与* [1];任何星星代表一个内部数组;我应该使用 *[] 代替 *.[] 并在 * 和 [] 之间添加一个点吗? (2)范围运算符..或内部数组切片的存根运算符?非常感谢 !我正在热切地学习 perl6。
    • @lisprogtor: re (1),应该没有任何区别——我只是觉得前者更具可读性; re (2),虽然范围对象通常表现得像整数列表,但从概念上讲,它们有点不同(它们更接近数学区间);特别是,您不能使用范围向下计数,而必须使用 sequence operator ...
    • 我明白了!再次感谢克里斯托夫!退出类型 'exit' 或 '^D' > my $x = 1..5 1..5 > say $x 1..5 > say $x.list (1 2 3 4 5) > my $y = 5..1 5..1 > 说 $y.list () > 我的 $z=5...1 (5 4 3 2 1) >
    猜你喜欢
    • 2010-09-07
    • 2014-09-16
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多