如何从数组中减去数组?

San*_*ing 18 arrays perl

当我尝试以下

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @bl = qw(red green blue);
my @a = qw(green yellow purple blue pink);

print Dumper [grep {not @bl} @a];
Run Code Online (Sandbox Code Playgroud)

我得到一个空数组.我原以为会@bl减去@a,所以输出是yellow purple pink.

这有什么不对?

Eri*_*rom 34

您需要@bl变成哈希来执行设置差异:

my %in_bl = map {$_ => 1} @bl;
my @diff  = grep {not $in_bl{$_}} @a;
Run Code Online (Sandbox Code Playgroud)

  • 这比这个问题的常见问题解答更好 - 常见问题只显示如何计算两个数组之间的"对称差异" (7认同)
  • 在Perl 5.10或更新版本中你可以写它`我的@diff = grep {not $ _ ~~ @ bl} @a;` (6认同)