Perl排序arrayref

时间:2018-11-06 23:35:31

标签: arrays perl sorting multidimensional-array

所以我有这个Perl代码:

$array->[0][0] = "cc";
$array->[0][1] = "3";
$array->[1][0] = "aaaa";
$array->[1][1] = "2";
$array->[2][0] = "bb";
$array->[2][1] = "1";

我需要按字母顺序对其进行排序(第二列),以便$ array-> [0] [0]为“ aaaa”,而$ array-> [0] [1]为“ 2”

我在90年代编程101期间肯定已经睡着了。我已经花了数小时在网上拖曳代码和教程,但无法获取。有人可以给我提供一些示例代码。谢谢!

2 个答案:

答案 0 :(得分:7)

只需按第一个元素对取消引用的数组进行排序:

$array = [ sort { $a->[0] cmp $b->[0] } @$array ];

@$array = sort { $a->[0] cmp $b->[0] } @$array;

返回:

[ [ 'aaaa', '2' ],
  [ 'bb',   '1' ],
  [ 'cc',   '3' ] ]

答案 1 :(得分:4)

如果您可以使用CPAN,请使用List::UtilsBy(或通过List::AllUtils)提供的sort_by功能

use List::AllUtils 'sort_by';
$array = [ sort_by { $_->[0] } @$array ];

...或使用Sort::Key

use Sort::Key 'keysort';
$array = [ keysort { $_->[0] } @$array ];

两者都可以达到相同的目的,但是您实际上应该尝试获得List::AllUtils的现代版本,因为它可以避免重新发明很多轮子。