Perl中哈希的排序和打印

Perl中哈希的排序和打印,perl,sorting,hash,Perl,Sorting,Hash,使用Perl,我有一个类似于以下内容的HoH: %HoH = ( 'A' => { 'a' => 4, 'b' => 18, 'c' => 2 }, 'B' => { 'a' => 1, 'b' => 2

使用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...
此时的任何方向都将受到欢迎,因为这是游戏的新方向。

例如:

 for my $k (sort keys %HoH) {
    my $h = $HoH{$k};
    my $g= (sort {$h->{$b} <=> $h->{$a}} keys %$h)[0];
    print "$k: $g \n";
 }
我的$k(排序键%HoH){
my$h=$HoH{$k};
my$g=(排序{$h->{$b}$h->{$a}}键%$h)[0];
打印“$k:$g\n”;
}

(您最初的输出没有多大意义,因为
%HoH
的键顺序不是固定的)

使用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";
}

之类的东西遍历散列非常简单,而(($key,$val)=每个%hash){…}
。然后你需要做的就是检查每个键的值并记住你看到的最高值。堆栈溢出不是开始学习编程的好地方。我们来这里是为了回答特定的问题,而不是“嘿,我才刚开始,有人能帮我吗?”寻找一些在线教程,或者是一个刚开始的新手社区。我想这是一个足够具体的问题,而我无法在其他网站上找到这些信息。感谢那些提供建议和提示的人。这是一个简洁的解决方案。如果我们不知道问题空间有多大,我可能会避免排序——如果他需要在具有数十万个键的散列上进行排序,这可能会对性能产生相当大的影响。谢谢。输出顺序无关紧要,我只是命令它试图把问题的要点弄清楚。使用类似于
List::Util::max()
(在O(N)中运行)的东西,而不是按O(NlogN)排序,会更快。@AKHolland:当然,这是一个快速编写解决方案,但当然,仅仅为了得到max元素而对整个数组进行排序是次优的。
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";
}