Arrays 如果在数组中找不到,perl将删除哈希项
我有以下散列:Arrays 如果在数组中找不到,perl将删除哈希项,arrays,perl,hash,Arrays,Perl,Hash,我有以下散列: %{$data{$id}{$date} 这包括大量的日期 以及一个数组@dates,该数组包含在%hash中找到的日期部分 通过我的%hash循环并删除@dates数组中未找到的所有日期的最佳方法是什么?完成后,我希望%hash只包含@array日期中的值 在我从@dates数组中创建了一个散列后,我尝试了“delete除非存在”查看键,但会得到缺少的参数错误。您应该循环查看%{$data{$id}的键 my %dates = map {$_ => 1} @dates; e
%{$data{$id}{$date}
这包括大量的日期
以及一个数组@dates
,该数组包含在%hash
中找到的日期部分
通过我的%hash
循环并删除@dates
数组中未找到的所有日期的最佳方法是什么?完成后,我希望%hash
只包含@array
日期中的值
在我从
@dates
数组中创建了一个散列后,我尝试了“delete除非存在”查看键,但会得到缺少的参数错误。您应该循环查看%{$data{$id}
的键
my %dates = map {$_ => 1} @dates;
exists $dates{$_} or delete $data{$id}{$_} for keys %{$data{$id}};
只要
@dates
中的日期保证出现在散列中,您就可以使用映射
%{ $data{$id} } = map { $_ => $data{$id}{$_} } @dates
请告诉我们您编写的实际代码,包括
删除,除非存在,以及确切的错误消息。很好的选择$data
是对散列的引用,因此您需要编写$$data{$id}{$}
而不是$data{$id}{$}
@blhsing:如果$data
是散列引用,那么OP的代码是错误的,我没有理由这么假设。@blhsing:即使您是正确的,最好还是编写$data->$id}{$}{$}
@borodin谢谢!这过滤掉了所有正确的日期,但除了最后一个日期之外,我最终得到了所有未定义的散列。我将调试这个。您没有非常仔细地描述您的数据结构,我可能误解了它。如果你在问题中添加一堆散列,那么它会有所帮助。