我想知道是否可以根据底层密钥对哈希中的密钥进行排序?
为了澄清,我将如何按字母顺序排序和打印以下内容:
my %hash;
$hash{1}{b};
$hash{2}{c};
$hash{3}{a};
$hash{4}{d};
$hash{5}{e};
Run Code Online (Sandbox Code Playgroud)
让我们假设数据结构是散列的散列,其中每个子散列只有一个键.在这种情况下,我们可以按字母顺序对子哈希中的一个键进行排序.下面的解决方案通过使用键列表中的第一个来实现.如果在该子哈希中有多个键,因为它们从未被排序,并且它只是随机的,这没有意义.
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] );
}
Run Code Online (Sandbox Code Playgroud)
代码首先%hash按字母顺序创建按每个键内部键排序的键列表.然后,它迭代该排序键列表,并使用Data :: Dumper显示每个键和值.
这是输出.
$3 = {
'a' => 1
};
$1 = {
'b' => 1
};
$2 = {
'c' => 1
};
$4 = {
'd' => 1
};
$5 = {
'e' => 1
};
Run Code Online (Sandbox Code Playgroud)