在perl中,根据哈希值对键(也是值)进行排序

在perl中,根据哈希值对键(也是值)进行排序,perl,sorting,hash,Perl,Sorting,Hash,例如,这是我的散列 'Level1_A' => { 'Level2_A' => 1071, 'Level2_B' => 3429, 'Level2_C' => 3297 }, 'Level1_B' =>

例如,这是我的散列

     '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
                },
最后,我希望找到对应于最高值的键

1级A级B级3429

1级B级2级A级726级

散列本身就是无序的,没有办法对它们进行排序。但是,您可以找到散列值的最大值,最好使用模块来提供帮助

通过提供
max\u,并允许您查找与最大数值对应的哈希键

像这样

使用严格;
使用“全部”警告;
使用列表::UtilsBy'max_by';
我的$data={
“级别1_A”=>{
'Level2_A'=>1071,
“级别2_B”=>3429,
'Level2_C'=>3297,
},
“级别1_B”=>{
'Level2_A'=>702,
'Level2_B'=>726
},
};
对于我的$k1(排序键%$data){
my$v1=$data->{$k1};
my$k2=max_by{$v1->{$}keys%$v1;
printf“%s%s%s\n”、$k1、$k2、$v1->{$k2};
}
输出
1级A级2级B级3429
级别1_B级别2_B 726

请显示不适合您的代码。您的输出来自Data::Dumper,它只是转储哈希引用的表示形式。Perl中的哈希从不排序。您可以根据需要按值对键列表进行排序,然后打印键和值对。但是Data::Dumper与此无关;您的代码按值对它们进行排序,首先是最低值。如果您希望使用相反的方式,请切换
$a
$b
或使用
反向
。但你的问题是什么还不清楚。您的
%hash
是否包含
(Level1_a=>{Level2_B=>1071,…},…)
?请回答您的问题,在那里输入您的代码,并修改实际的数据结构。那么您想要具有最高值的第二级密钥吗?