我有一个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
答案 0 :(得分:7)
替换此行
for my $array (@ { $hash{$key} } ) {
通过
for my $array ( sort { $a->[1] <=> $b->[1] } @{ $hash{$key} } ) {
@{ $hash{$key} }
中的所有数组引用都包含要在索引1处排序的元素。此排序块按第二个字段按数字升序排序。