在Perl中对哈希散列进行排序和打印

时间:2013-12-17 19:00:48

标签: perl sorting hash

使用Perl,我有一个类似于此的HoH:

%HoH = (
'A' =>  {
                   'a' => 4,
                   'b' => 18,
                   'c' => 2
               },
'B'   =>  {
                   'a'  => 1,
                   'b'  => 2
               },
'C'   =>  {
                   'a'  => 1
               },
'D'   =>  {
                   'a'  => 1,
                   'b'  => 2,
                   'c'  => 5,
                   'd'  => 9
               },
    #........ on and on and on ..... 
 );

对于每个大写键,我想打印一个与其关联的最大值的小写键。

示例输出:

b,b,a,d...

此时的任何方向都会受到赞赏,对游戏来说是新的。

3 个答案:

答案 0 :(得分:1)

use List::Util qw(reduce);

for my $k1 (sort keys %HoH) {
    my $h = $HoH{$k1};
    my $k2 = reduce { $h->{$a} > $h->{$b} ?$a :$b } keys %$h;

    print "$k1, $k2\n";
}

答案 1 :(得分:0)

例如:

 for my $k (sort keys %HoH) {
    my $h = $HoH{$k};
    my $g= (sort {$h->{$b} <=> $h->{$a}} keys %$h)[0];
    print "$k: $g \n";
 }

(您的原始输出没有太大意义,因为%HoH的键的顺序不固定)

答案 2 :(得分:0)

使用List :: Util的reduce;

use List::Util qw(reduce);

use strict;
use warnings;

my %HoH = ...

for my $k (sort keys %HoH) {
    my $h = $HoH{$k};

    my $maxKey = reduce {$h->{$a} > $h->{$b} ? $a : $b} keys %$h;

    print "$k -> $maxKey\n";
}