基本上,我有一个数组,让我们说@badvalues
。
我有另一个数组,让我们说@values
。
基本上,我想要这个:
对于@badvalues
@values
@values
,不包含数组@badvalues
中的元素,或者新数组@goodvalues
,包含{{1}的每个元素1}}这不是@values
。我知道这听起来很简单,也许是因为我累了,但在搜索时似乎无法找到这个问题的明确答案。
答案 0 :(得分:10)
# Get only bad values
my %values = map {$_=>1} @values;
my @new_badvalues = grep { !$values{$_} } @badvalues;
# Get only good values
my %badvalues = map {$_=>1} @badvalues;
my @goodvalues = grep { !$badvalues{$_} } @values;
# An alternative
@badvalues{@badvalues} = ();
foreach $item (@values) {
push(@goodvalues, $item) unless exists $badvalues{$item};
}
如需更完整的参考,请参阅“Perl Cookbook”中的“第4.7章。在一个数组中查找元素而不是另一个数组”
答案 1 :(得分:1)
如果你有一个现代的Perl版本,比如说> = 5.10.1,那么你也可以这样做:
my @final_good = grep { !($_ ~~ @badvalues ) } @values;
或更清晰的优先权:
my @final_good = grep { not $_ ~~ @badvalues } @values;
这是使用Perl 5.10中添加的smartmatch运算符。
答案 2 :(得分:1)
my %badvalues;
@badvalues{@badvalues} = ();
my @goodvalues = grep !exists $badvalues{$_}, @values;