如何找到一个数组中的哪些元素不在另一个数组中?

bir*_*rdy 1 perl

我是编程新手,因此我陷入了一个基本问题.

以下是我为了比较而编写的代码.但是我得到的结果对我来说没有意义.如果有人能告诉我出了什么问题,我将不胜感激.

有两个数组:@array1,@array2不等长.

我想比较两个并列出@ array1中不存在的值.

my %temp = map {$_,$_}@array2;
for (@array1){
next if exists $temp{$_};
open (FILE, ">>/filename") or die "$!";
print FILE "$_\n";
close(FILE);
}
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 10

请参阅常见问题解答如何计算两个阵列的差异?如何计算两个数组的交集?

调整您发布的代码:

#!/usr/bin/perl

use strict; use warnings;

my @x = 1 .. 10;
my @y = grep { $_ % 2 } @x;

my %lookup = map { $_ => undef } @y;

for my $x ( @x ) {
    next if exists $lookup{$x};
    print "$x\n";
}
Run Code Online (Sandbox Code Playgroud)

  • 我经常做'我看到的%; @seen {@y} =(1)x @y;`而不是`map`,但它们相同. (3认同)

Eva*_*oll 5

如果你正在为测试做这个,我认为你是我会强烈建议在更新版本的测试中使用is_deeply ::更多

您将不得不更新Test :: More

cpanp install Test::More
Run Code Online (Sandbox Code Playgroud)

或者如果你使用的是perl 5.5

cpan Test::More
Run Code Online (Sandbox Code Playgroud)

然后你就可以使用它了

use Test::More;
tests => 1
is_deeply ( \@arr1, \@arr2, 'test failed' );
Run Code Online (Sandbox Code Playgroud)

如果你没有这样做进行测试,但你是为了内省的目的这样做并且阵列很小,我建议使用XXX:

cpanp install http://search.cpan.org/CPAN/authors/id/I/IN/INGY/XXX-0.12.tar.gz
Run Code Online (Sandbox Code Playgroud)

然后你就可以使用它了

use XXX;
YYY [ \@arr1, \@arr2 ];
Run Code Online (Sandbox Code Playgroud)