【问题标题】:sorting keys (which are also values) on the basis of values in hashes in perl根据 perl 中的哈希值对键(也是值)进行排序
【发布时间】:2018-05-10 17:57:52
【问题描述】:

例如,这是我的哈希

     '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

【问题讨论】:

  • 请显示不适合您的代码。
  • 您的输出来自 Data::Dumper,它只是转储了哈希引用的表示形式。 Perl 中的哈希从不排序。如果需要,您可以按值对键列表进行排序,然后打印键和值对。但 Data::Dumper 与此无关。
  • 我的@sorted_keys = sort { $hash{$a} $hash{$b} } 键%hash;
  • 您的代码按值对它们进行排序,最低值在前。如果您希望它们反过来,请切换$a$b 或使用reverse。但目前尚不清楚您的问题是什么。您的%hash 是否包含( Level1_a => { Level2_B => 1071, ... }, ... )?请edit您的问题,在其中包含您的代码,并修改实际的数据结构。
  • 所以你想要最高值的第二级键?

标签: perl sorting hash


【解决方案1】:

哈希本质上是无序的,没有办法对其进行排序。但是,您可以找到散列值的最大值,最好使用模块来帮助

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2011-01-08
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多