【发布时间】:2015-08-29 03:46:19
【问题描述】:
我有以下哈希:
my %HASH = (
'List1' => [ 'the', 'red', 'cat', 'jumps' ],
'List2' => [ 'the', 'brown', 'fox', 'jumps' ],
'List3' => [ 'a', 'red', 'fox', 'jumps' ],
);
我想删除这些数组中的重复元素,以便只保留唯一元素。所需的输出如下:
my %HASH = (
'List1' => [ 'cat' ],
'List2' => [ 'brown' ],
'List3' => [ 'a' ],
);
换句话说,如果一个元素同时出现在 List1 和 List2 中,则应该从两个列表中删除它。
我已尝试执行以下操作:
use strict;
use warnings;
use diagnostics;
use Data::Dumper;
foreach my $key ( keys %HASH ) {
foreach ( @{$HASH{$key}} ) {
if(exists($HASH{$key})){
@{$HASH{$key}} = delete($HASH{$key});
}
}
}
print Dumper(\%HASH);
这似乎没有做任何事情,哈希保持原样。我对 Perl 还是很陌生,所以我不确定我哪里出错了。但是 Perldoc 表示无论如何都不推荐在数组值上调用 exists,因此也欢迎任何使用非存在的东西的解决方案!
【问题讨论】: