我们如何根据值对多维散列进行排序?

时间:2017-11-10 09:50:16

标签: regex perl perl-module hash-of-hashes

当我使用dumper时,我有一个看起来像这样的哈希:

{      
 hello => {   
    pqr => {   
     a => 455,
     b => 52,
     c => "hello"
    },
    lmn => {
     a => 3,
     b => 39,
     c => "hi"
    }
 },
 hi => {
    suv => {
     a => 21,
     b => 36,
     c => "well"
    },
    xyz => {
     a => 32,
     b => 56,
     c => "done"
    }
 }
}

我想根据“b”的值进行排序。

输出应该是:

  

hello.lmn.b = 39 hello.pqr.b = 52

     

hi.suv.b = 36 hi.xyz.b = 56

1 个答案:

答案 0 :(得分:1)

您应该使用sort来排序列表。在这种情况下,哈希是嵌套的,因此它在第一级密钥处迭代,然后根据b在第三级包含的值使用第二级密钥进行排序。

for my $k1 (keys %hash) {
    for my $k2 (sort {$hash{$k1}{$a}{'b'} <=> $hash{$k1}{$b}{'b'}} keys %{$hash{$k1}}) {
        print "$k1.$k2.b = ",$hash{$k1}{$k2}{'b'}, " ";
    }
    print "\n";
}