例如,这是我的哈希
'Level1_A' => {
'Level2_A' => 1071,
'Level2_B' => 3429,
'Level2_C' => 3297
},
'Level1_B' => {
'Level2_A' => 702,
'Level2_B' => 726
},
我想要一个看起来像
的输出 'Level1_A' => {
'Level2_B' => 3429,
'Level2_C' => 3297,
'Level2_A' => 1071
},
'Level1_B' => {
'Level2_B' => 726,
'Level2_A' => 702
},
最终,我想要对应于最高值的键。
Level1_A ___ Level2_B ___ 3429
Level1_B ___ Level2_A ____ 726
答案 0 :(得分:3)
哈希本质上是无序的,没有办法对它们进行排序。但是,您可以找到哈希值的最大,最好使用模块来帮助
List::UtilsBy
提供max_by
并允许您找到与最大数值对应的哈希键
喜欢这个
use strict;
use warnings 'all';
use List::UtilsBy 'max_by';
my $data = {
'Level1_A' => {
'Level2_A' => 1071,
'Level2_B' => 3429,
'Level2_C' => 3297,
},
'Level1_B' => {
'Level2_A' => 702,
'Level2_B' => 726
},
};
for my $k1 ( sort keys %$data ) {
my $v1 = $data->{$k1};
my $k2 = max_by { $v1->{$_} } keys %$v1;
printf "%s %s %s\n", $k1, $k2, $v1->{$k2};
}
Level1_A Level2_B 3429
Level1_B Level2_B 726