我有兩個數組,我想找到在一個數組元素而不是另一個:我怎樣才能找到在Perl中的一個數組,但不是另一個的元素?
例如:
@array1 = ("abc", "cde", "fgh", "ijk", "lmn")
@array2 = ("abc", "fgh", "lmn")
我需要到結束:
@array3 = ("cde", "ijk")
我有兩個數組,我想找到在一個數組元素而不是另一個:我怎樣才能找到在Perl中的一個數組,但不是另一個的元素?
例如:
@array1 = ("abc", "cde", "fgh", "ijk", "lmn")
@array2 = ("abc", "fgh", "lmn")
我需要到結束:
@array3 = ("cde", "ijk")
my @array3;
foreach my $elem (@array1)
{
if(!grep($elem eq $_, @array2))
{
push(@array3, $elem);
}
}
將所述第二陣列中的元素到一個哈希,爲了有效檢查,以查看是否一個特定的元素在它,然後過濾所述第一陣列的只是那些沒有所述第二數組中的元素:
my %array2_elements;
@array2_elements{ @array2 } =();
my @array3 = grep ! exists $array2_elements{$_}, @array1;
您可以使用名爲List::Compare的cpan模塊。
use List::Compare;
my $lc = List::Compare->new(\@array1,\@array2);
my @newarray = $lc->get_symdiff;
使用散列作爲查找表。其鍵是所述第二數組的元素,值並不重要:
#!/usr/bin/env perl
use strict;
use warnings;
my @array1 = ("abc", "cde", "fgh", "ijk", "lmn");
my @array2 = ("abc", "fgh", "lmn");
my @array1only;
# build lookup table
my %seen;
foreach my $elem (@array2) {
$seen{$elem} = 1;
}
# find elements present only in @array1
foreach my $elem (@array1) {
push @array1only, $elem unless $seen{$elem};
}
print "Elements present only in \@array1: ", join(", ", @array1only), "\n";
更多見的配方4.8 Perl Cookbook。
+1好的作品:) – vol7ron
+1對我自己的答案的短版本(並適應我自己的答案)。 – Flimzy