- 论坛徽章:
- 0
|
求2个数组之间的交集,方法采纳http://bbs.chinaunix.net/thread-1800151-1-1.html
发现结果不太对
程序如下:(这是我程序的缩略版本)
#!usr/bin/perl -w
use strict;
my (@a,@b,@c,$info,@out1,@out2,@set,@array);
open IN,"a.txt";
while (<IN>){
chomp;
@a=split;
$info=join("\t",$a[0],$a[1],$a[2]);
push (@set,$info);
}
foreach my $s(@set){
chomp $s;
@array=split /\t/,$s;
open IN1,"b.txt";
while (<IN1>){
chomp;
@b=split;
if ($b[0] eq $array[0] && $b[1] < $array[2] && $b[2] > $array[1]){push (@out1,$s);}
}
open IN2,"c.txt";
while (<IN2>){
chomp;
@c=split;
if ($c[0] eq $array[0] && $c[1] < $array[2] && $c[2] > $array[1]){push (@out2,$s);}
}
}
my %m;my %n;my @aa;
for(@out1,@out2){
$m{$_}++ && $n{$_}++;
}
@aa=keys %n;
foreach my $a(@aa)
{print "$a\n";}
输入文件
a.txt
a 501 800
cat b.txt
b 501 800
c.txt
a 401 700
a 701 900
输出:a 501 800
@out2为空
@out1的内容为重复的2行 a 501 800 ,为何按照这个方法取交集,会输出结果呢?劳烦各位大神们指点一二。
|
|