如何在插入顺序中将哈希值提取到数组中?

Tom*_*Tom 6 perl hash tie

给定Perl中的哈希值(任何哈希值),如何从该哈希值中提取它们的顺序,并将它们放入数组中?

例:

my %given = ( foo => '10', bar => '20', baz => '15' );
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果:

my @givenValues = (10, 20, 15);
Run Code Online (Sandbox Code Playgroud)

Zai*_*aid 17

来自perldoc perlfaq4:如何让哈希记住我将元素放入其中的顺序?


使用Tie::IxHash来自CPAN.

use Tie::IxHash;
tie my %myhash, 'Tie::IxHash';

for (my $i=0; $i<20; $i++) {

    $myhash{$i} = 2*$i;
}

my @keys = keys %myhash;
# @keys = (0,1,2,3,...)
Run Code Online (Sandbox Code Playgroud)


dsm*_*dsm 5

以下将做你想要的:

my @orderedKeys = qw(foo bar baz);
my %records     = (foo => '10', bar => '20', baz => '15');

my @givenValues = map {$records{$_}} @orderedKeys;
Run Code Online (Sandbox Code Playgroud)

注意:更好的解决方案是使用Tie :: IxHashTie :: Hash :: Indexed来保存插入顺序.