给定Perl中的哈希值(任何哈希值),如何从该哈希值中提取它们的顺序,并将它们添加到数组中?
示例:
my %given = ( foo => '10', bar => '20', baz => '15' );
我想得到以下结果:
my @givenValues = (10, 20, 15);
答案 0 :(得分:17)
来自perldoc perlfaq4
:How can I make my hash remember the order I put elements into it?
使用CPAN中的
Tie::IxHash
。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,...)
答案 1 :(得分:5)
以下将做你想做的事:
my @orderedKeys = qw(foo bar baz);
my %records = (foo => '10', bar => '20', baz => '15');
my @givenValues = map {$records{$_}} @orderedKeys;
注意:更好的解决方案是使用Tie::IxHash或Tie::Hash::Indexed来保留广告订单。
答案 2 :(得分:3)
如果您有正确顺序的键列表,则可以使用哈希切片:
my @keys = qw(foo bar baz);
my %given = {foo => '10', bar => '20', baz => '15'}
my @values = @given{@keys};
否则,请使用Tie::IxHash
。
答案 3 :(得分:2)
您可以使用values
,但我认为您无法按正确的顺序获取它们,因为创建哈希时订单已经丢失