如何删除与perl中第二个数组中的某个元素相等的数组元素

Qia*_* Li 11 perl

只是想知道我是否有两个数组,A和B,如何删除/删除A中也可以在B中找到的那些元素?这样做最有效的方法是什么?

而且,作为一种特殊情况,如果B是grepA 之后的结果数组,该怎么做?当然,在这种情况下,我们可以做一个grep否定的条件.但是在perl中是否有类似于另一个数组的补充?

谢谢.

Eri*_*rom 7

任何时候你想到found in你可能都在寻找哈希.在这种情况下,您将创建B值的哈希值.然后你会grep A,检查每个元素的哈希值.

my @A = 1..9;
my @B = (2, 4, 6, 8);
my %B = map {$_ => 1} @B;

say join ' ' => grep {not $B{$_}} @A; # 1 3 5 7 9
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,perl通常不会自行维护任何类型的found in表,因此您必须提供一个表.上面的代码可以很容易地包含在一个函数中,但为了提高效率,最好是内联.

  • @Qiang Li,他的代码确实维持了`@ A`中元素的顺序.(假设main =维护) (3认同)
  • @Qiang Li,Tie :: IxHash是创建有序关联数组(如LinkedHashMap)的一种方法,但我不知道这与您的问题或此解决方案有什么关系. (2认同)