【问题标题】:Sort HOA by key first, then value首先按 key 排序 HOA,然后按 value
【发布时间】:2013-08-29 23:20:30
【问题描述】:

我有一个 HoA,我设置如下(测试示例):

#!/usr/bin/perl -w
use strict;

my @array1 = qw (1 1 1 4 5); # Note '1' appears several times
my @array2 = qw (a b c d e);
my @array3 = qw (8 6 7 9 10);
my @array4 = qw (f g h i j);


my %hash;   
push @{$hash{$array1[$_]}}, [ $array2[$_], $array3[$_], $array4[$_] ] for 0 .. $#array1;

for my $key (sort keys %hash) { 
    for my $array (@ { $hash{$key} } ) {
        my ($array2, $array3, $array4) = @$array;
        print "[$key] $array2\t$array3\t$array4\n";
    }
}

输出:

[1] a   8   f
[1] b   6   g
[1] c   7   h
[4] d   9   i
[5] e   10  j

我想要做的是能够首先按键排序(如上所述),但在键相同的情况下,对散列中包含的不同数组进行排序 - 例如通过@array3 中的值以数字方式给出所需的输出:

        *
[1] b   6   g
[1] c   7   h
[1] a   8   f
[4] d   9   i
[5] e   10  j

【问题讨论】:

    标签: perl sorting hash


    【解决方案1】:

    替换此行

    for my $array (@ { $hash{$key} } ) {
    

    通过

    for my $array ( sort { $a->[1] <=> $b->[1] } @{ $hash{$key} } ) {
    

    @{ $hash{$key} } 中的所有数组引用在索引 1 处都有您要排序的元素。此排序块按第二个字段按数字升序对它们进行排序。

    【讨论】:

      猜你喜欢
      • 2016-11-03
      • 2023-03-05
      • 2013-06-29
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多