如何使用现有哈希上的键数组创建新哈希?
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};
答案 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;