Perl:基于特定列对具有多个列的2D数组进行排序

Mik*_*ike 5 arrays perl perl-data-structures

伪代码:

my @unsortedArray = { ["Harry", 10], ["Tim", 8], ["Joe", 3]};
my @sortedArray = ?????
Run Code Online (Sandbox Code Playgroud)

最终sortedArray应该基于col-2(整数)进行排序,处理与"人名"(col-1)的1对1关系.最终结果应如下所示:

sortedArray should be { ["Joe", 3], ["Tim", 8], ["Harry", 10] }; 
Run Code Online (Sandbox Code Playgroud)

Ste*_*sky 8

您可以给出一个谓词sort,即:一个被评估的函数,用于比较列表的元素.

my @unsorted = ( ["Harry", 10], ["Tim", 8], ["Joe", 3] );

my @sorted = sort { $a->[1] <=> $b->[1] } @unsorted;
Run Code Online (Sandbox Code Playgroud)

在谓词(花括号中的表达式)中,$a并且$b是外部列表中要比较的元素.

sort只关注一维列表,所以它不会混淆外部列表元素的内部结构.因此,名称和数字之间的关系可以毫不费力地保留.

请参阅perldoc -f sortperldoc perlop了解更多详情.

  • @askovpen - 如果`$ a`小于`$ b`,这没有任何作用,并且不能保证数组中的'$ a`早于`$ b`.[<=>](http://perldoc.perl.org/perlop.html#Equality-Operators)和它基于文本的堂兄`cmp`)是一个专门用于`sort`函数的运算符.尝试排序`qw(2 5 28 3 1 62 4 81)`.我得到了'1,2,5,3,28,62,4,81`这样做. (2认同)