我想知道是否可以根据底层密钥对哈希中的密钥进行排序?
为了澄清,我将如何按字母顺序排序和打印以下内容:
my %hash;
$hash{1}{b};
$hash{2}{c};
$hash{3}{a};
$hash{4}{d};
$hash{5}{e};
答案 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
};