给定 Perl 中的散列(任何散列),我如何从该散列中提取值,按照它们添加的顺序并将它们放入数组中?
例子:
my %given = ( foo => '10', bar => '20', baz => '15' );
我想得到以下结果:
my @givenValues = (10, 20, 15);
来自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,...)
以下将做你想要的:
my @orderedKeys = qw(foo bar baz);
my %records = (foo => '10', bar => '20', baz => '15');
my @givenValues = map {$records{$_}} @orderedKeys;
注意:更好的解决方案是使用Tie::IxHash或Tie::Hash::Indexed来保存插入顺序。
如果您有正确顺序的键列表,则可以使用哈希切片:
my @keys = qw(foo bar baz);
my %given = {foo => '10', bar => '20', baz => '15'}
my @values = @given{@keys};
否则,使用Tie::IxHash
.
您可以使用values
,但我认为您无法以正确的顺序获取它们,因为在您创建哈希时顺序已经丢失了