perl6排序数组的最佳方法是什么?

lis*_*tor 9 arrays sorting perl6 indices raku

我需要对一组数组进行排序; .sort方法似乎默认工作.但是根据内部数组的不同索引排序的好方法是什么?

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

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

@allRecords.sort by itself sorts by birthdays. 
Run Code Online (Sandbox Code Playgroud)

什么是通过firstName或lastName或内部数组内的数据排序的更好方法?

非常感谢你!

Chr*_*oph 9

sort方法将sub作为可选参数.如果其arity为1,则使用返回值作为比较操作数; 如果它的arity是2,你可以手动进行元素之间的比较,但是你认为通过返回其中一个Less,Same或者More.

举个例子,我们可以按照这样的名字排序:

@allRecords.sort(*.[1]);
Run Code Online (Sandbox Code Playgroud)

我们可以按姓氏,然后是名字,然后生日,通过明确地进行单独的比较,如下所示:

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

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

@allRecords.sort(*.[2...0]);
Run Code Online (Sandbox Code Playgroud)

转换生日条目所以我们按年份排序是留给读者的练习,但一种方法是添加像

.comb(2).list.rotate(-1).join
Run Code Online (Sandbox Code Playgroud)

在适当情况下.

  • 您可以按姓氏排序,然后按名字排序,然后按生日那样排序:`@ a.sort:*[2 ... 0]` (4认同)