我有以下哈希值:
%{$data{$id}{$date}}
其中包含大量日期
和一个数组@dates
,其中包含在%hash
中找到的日期的一个子部分。
循环浏览我的%hash
并删除@dates
数组中找不到的所有日期的最佳方法是什么?完成此操作后,我希望%hash
仅具有@array
日期中的值。
从@dates
数组创建哈希后,我尝试过“除非存在,否则删除”来查看键,但是会丢失参数错误。
答案 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