在Perl中比较2个数组

时间:2010-06-14 13:47:38

标签: perl

有人可以在Perl中提供一个好/好的解决方案来比较2个数组(a和b),它们检查数组a中的每个元素是否都在数组b中找到(并且在数组b中只找到一次)?

2 个答案:

答案 0 :(得分:9)

答案 1 :(得分:1)

你是否关心和项目是不是在b?你用它表达b的方式可以有比a更多的项目。此外,您需要指定在数组中复制项目时发生的情况。以下是一些代码,用于查找b中的每个项目中是否至少有一个项目:

#!/usr/bin/perl

use strict;
use warnings;

sub all_in_second {
    my ($first, $second) = @_;
    my %in_second        = map { $_ => 1 } @$second;

    for my $item (@$first) {
        return 0 unless $in_second{$item};
    }
    return 1;
}

my @a = (1, 2, 3, 3, 4);
my @b = (1, 2, 3, 4, 5);

print all_in_second(\(@a, @b)) ? "true" : "false", "\n";

@a = (1, 2, 3, 3, 6);
@b = (1, 2, 3, 4, 5);

print all_in_second(\(@a, @b)) ? "true" : "false", "\n";