给定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.Run Code Online (Sandbox Code Playgroud)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;
Run Code Online (Sandbox Code Playgroud)
注意:更好的解决方案是使用Tie :: IxHash或Tie :: Hash :: Indexed来保存插入顺序.
| 归档时间: |
|
| 查看次数: |
1741 次 |
| 最近记录: |