perl 删除哈希项(如果在数组中找不到)



我有以下哈希:%{$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

最新更新