如果在数组中找不到perl,则删除哈希项

时间:2018-06-27 15:42:32

标签: arrays perl hash

我有以下哈希值: %{$data{$id}{$date}} 其中包含大量日期

和一个数组@dates,其中包含在%hash中找到的日期的一个子部分。

循环浏览我的%hash并删除@dates数组中找不到的所有日期的最佳方法是什么?完成此操作后,我希望%hash仅具有@array日期中的值。

@dates数组创建哈希后,我尝试过“除非存在,否则删除”来查看键,但是会丢失参数错误。

2 个答案:

答案 0 :(得分:4)

您应该改为遍历%{$data{$id}}的键。

my %dates = map {$_ => 1} @dates;
exists $dates{$_} or delete $data{$id}{$_} for keys %{$data{$id}};

答案 1 :(得分:3)

只要保证@dates中的日期出现在哈希中,就可以使用map

%{ $data{$id} } = map { $_ => $data{$id}{$_} } @dates