在Perl中使用@Array选择多个%哈希元素

时间:2014-05-30 01:55:04

标签: arrays perl hash

如何使用现有哈希上的键数组创建新哈希?

my %pets_all = ( 

    'rover' => 'dog',
    'fluffy' => 'cat',
    'squeeky' => 'mouse'
);

my @alive = ('rover', 'fluffy');

#this does not work, but hopefully you get the idea.
my %pets_alive = %pets_all{@alive};

2 个答案:

答案 0 :(得分:3)

我认为你想要一个哈希切片,就像这个

@pets_all{@alive}

虽然这只会给你一个相应哈希值的列表。要创建第二个散列,其中包含第一个元素的子集,请写入

my %pets_alive;
@pets_alive{@alive} = @pets_all{@alive};

但如果这是你的目标,那么可能有更好的设计。复制数据结构很少是必要或有用的

答案 1 :(得分:3)

my %pets_alive = %pets_all{@alive};被称为key/value hash slice,它实际上从最近发布的5.20开始工作。

在5.20之前,你有几个选择:

  • my %pets_alive; @pets_alive{@alive} = @pets_all{@alive};(哈希切片)

  • my %pets_alive = map { $_ => $pets_all{$_} } @alive;