我有以下哈希:%{$data{$id}{$date}}
包括大量日期
以及一个数组@dates
,其中包括在%hash
中找到的日期子部分。
循环遍历%hash
并删除数组中找不到的所有日期的最佳方法是什么@dates
?完成此操作后,我希望%hash
仅具有@array
日期的值。
在我从@dates
数组创建哈希后,我尝试"除非存在,否则删除"查看键,但会出现缺少参数错误。
你应该遍历%{$data{$id}}
键。
my %dates = map {$_ => 1} @dates;
exists $dates{$_} or delete $data{$id}{$_} for keys %{$data{$id}};
只要保证@dates
中的日期出现在哈希中,您就可以使用map
%{ $data{$id} } = map { $_ => $data{$id}{$_} } @dates