Perl基于底层键排序键

时间:2017-03-22 12:46:57

标签: perl hash

我想知道是否可以根据底层密钥对哈希中的密钥进行排序?

为了澄清,我将如何按字母顺序排序和打印以下内容:

my %hash;
$hash{1}{b};
$hash{2}{c};
$hash{3}{a};
$hash{4}{d};
$hash{5}{e};

1 个答案:

答案 0 :(得分:7)

假设数据结构是散列的散列,其中每个子散列只有一个键。在这种情况下,我们可以按字母顺序对子哈希中的一个键进行排序。下面的解决方案通过使用键列表中的第一个来实现。如果该子哈希中存在多个键,则没有意义,因为它们从未被排序,并且它只是随机的。

use strict;
use warnings;
use Data::Dumper;

my %hash = (
    '2' => { 'c' => 1 },
    '4' => { 'd' => 1 },
    '3' => { 'a' => 1 },
    '5' => { 'e' => 1 },
    '1' => { 'b' => 1 },
);

my @sorted = sort { ( keys %{ $hash{$a} } )[0] cmp( keys %{ $hash{$b} } )[0] } 
    keys %hash;

foreach my $key (@sorted) {
    print Data::Dumper->Dump( [ $hash{$key} ], [$key] );
}

代码首先按字母顺序创建按每个键内部键排序的%hash键的列表。然后,它会迭代排序键列表,并使用Data::Dumper显示每个键和值。

这是输出。

$3 = {
       'a' => 1
     };
$1 = {
       'b' => 1
     };
$2 = {
       'c' => 1
     };
$4 = {
       'd' => 1
     };
$5 = {
       'e' => 1
     };