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