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

时间:2010-08-03 13:13:54

标签: perl hash tie

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

示例:

my %given = ( foo => '10', bar => '20', baz => '15' );

我想得到以下结果:

my @givenValues = (10, 20, 15);

4 个答案:

答案 0 :(得分:17)

来自perldoc perlfaq4How 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::IxHashTie::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,但我认为您无法按正确的顺序获取它们,因为创建哈希时订单已经丢失