Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如果在数组中找不到,perl将删除哈希项_Arrays_Perl_Hash - Fatal编程技术网

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谢谢!这过滤掉了所有正确的日期,但除了最后一个日期之外,我最终得到了所有未定义的散列。我将调试这个。您没有非常仔细地描述您的数据结构,我可能误解了它。如果你在问题中添加一堆散列,那么它会有所帮助。