Perl基于底层键排序键

Zyz*_*zyx 1 perl hash

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

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

my %hash;
$hash{1}{b};
$hash{2}{c};
$hash{3}{a};
$hash{4}{d};
$hash{5}{e};
Run Code Online (Sandbox Code Playgroud)

sim*_*que 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] );
}
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)