两个列表的比较

两个列表的比较

经常会遇到这样的情况
有两个列表,如何比较他们。得到他们的交集,并集,各自补集
谢谢,常常有这样的问题。


QUOTE:
原帖由 wpeng18 于 2008-1-25 17:08 发表
经常会遇到这样的情况
有两个列表,如何比较他们。得到他们的交集,并集,各自补集
谢谢,常常有这样的问题。

%还是@
是@
想了一个求并集的:
#!/usr/bin/perl
use strict;
use warnings;

my @a1 = (1..10);
my @a2 = (6..15);
my %h = map { $_ => $_ } (@a1 ,@a2);

for(keys %h) {
        print $_ ."\n";
}

其他的在考虑考虑。
交集:
#!/usr/bin/perl
use strict;
use warnings;

my @a1 = (1..10);
my @a2 = (6..15);
my %h;

foreach my $key (@a2) {
        $h{$key} = $key if grep {$_ == $key} @a1;
}

for(keys %h) {
        print "$_\n";
}


[Copy to clipboard] [ - ]
CODE:
my @a=("a","b","c","d","e");
my @b=("b","g","f","e");

my %a=map{$_=>1} @a;
my %b=map{$_=>1} @b;

# 交集
@A = grep( $a{$_}, @b ) ;

# 补集
@B1=grep(!defined $a{$_}, @b);
@B2=grep(!defined $b{$_}, @a);

# 并集
%C=map {$_=>1} @a,@b;
@C=keys %C;