【问题标题】:Perl sorting arrayrefPerl 排序数组引用
【发布时间】:2019-04-10 10:09:36
【问题描述】:

所以我有这个 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 期间睡着了。我花了好几个小时在网上搜索代码和教程,但就是找不到。有人可以给我一些示例代码吗?谢谢!

【问题讨论】:

    标签: arrays perl sorting multidimensional-array


    【解决方案1】:

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

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

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

    返回:

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

    【讨论】:

    • 太棒了,谢谢@choroba - 我使用的是''而不是'cmp'。完美运行。谢谢!
    【解决方案2】:

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

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

    ...或者使用Sort::Key

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

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

    【讨论】:

    • @$array = ... @$array; 而不是$array = [ ... @$array ]; 以避免创建新数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2011-07-14
    • 2015-05-18
    • 1970-01-01
    • 2012-07-28
    • 2016-02-25
    相关资源
    最近更新 更多