伪代码:
my @unsortedArray = { ["Harry", 10], ["Tim", 8], ["Joe", 3]};
my @sortedArray = ?????
最终sortedArray应根据COL-2(整数)进行排序,照顾的1对1的关系与(COL-1)“的人的名字。” 最终的结果应该是这样的:
sortedArray should be { ["Joe", 3], ["Tim", 8], ["Harry", 10] };
伪代码:
my @unsortedArray = { ["Harry", 10], ["Tim", 8], ["Joe", 3]};
my @sortedArray = ?????
最终sortedArray应根据COL-2(整数)进行排序,照顾的1对1的关系与(COL-1)“的人的名字。” 最终的结果应该是这样的:
sortedArray should be { ["Joe", 3], ["Tim", 8], ["Harry", 10] };
你可以给一个谓词来sort
,那就是:这是评价比较列表的元素的功能。
my @unsorted = ( ["Harry", 10], ["Tim", 8], ["Joe", 3] );
my @sorted = sort { $a->[1] <=> $b->[1] } @unsorted;
在谓词(在大括号中的表达式), $a
和$b
是被比较的外列表中的元素。
sort
只关心一维的列表,所以不会乱用外列表元素的内部结构。 所以名称和编号之间的关系毫不费力地保留。
请参阅perldoc -f sort
和perldoc perlop
更多的细节。
一种更有效的解决方案,尤其是对于较大的阵列,可以是使用List::UtilsBy::nsort_by
:
use List::UtilsBy qw( nsort_by );
my @unsorted = ( ["Harry", 10], ["Tim", 8], ["Joe", 3] );
my @sorted = nsort_by { $_->[1] } @unsorted;
而在小的情况下的开销是不容易引起注意,对于更复杂的功能O(n log n)
密钥提取成本变得更高,并且更preferrable提取“排序关键字”每个值的唯一一次,这是什么nsort_by
一样。