我有一个包含几个字符串的数组。还有另一个数组包含可能包含或不包含在第一个数组中的字符串。
从数组a中的字符串中删除数组b中字符串的任何实例的最佳方法是什么?我试图使用grep,如下例所示,但它完全清空了数组。
my @Aray = ('Chris', 'John', 'Paul', 'Max', 'Jim', 'John');
my @Bray = ('Chris', 'John');
foreach $name (@Bray){
@Aray = grep {$_ != $name} @Aray;
}
这会导致@Aray中没有任何元素,反对'保罗','马克斯','吉姆'
我还尝试使用传统的for循环并使用相同的结果索引@Bray中的每个名称。
答案 0 :(得分:6)
@choroba上面显示了如何解决您要问的具体问题。
基于另一个数组中的元素删除一个数组的元素是Perl中的常见问题,并且有一个有用的习惯用语可以加速这些操作。具体做法是:
此方法的好处是只能读取一次删除数组(数组B)而不是数组A的每个元素
my @Aray = ('Chris', 'John', 'Paul', 'Max', 'Jim', 'John');
my @Bray = ('Chris', 'John');
my %to_delete = map { $_ => 1 } @Bray;
@Aray = grep { ! $to_delete{$_} } @Aray;