列出两个数据集之间的差异和重叠

时间:2012-01-11 16:13:34

标签: perl

我有两个数据集,A和B.每个数据集的格式是每行一个数字。例如,

12345

23456

67891

2345900

12345

A中的一些数据未包含在数据集B中。如何列出A中的所有这些数据,以及如何列出A和B共享的所有这些数据。这是否可以在Perl中执行此操作?

2 个答案:

答案 0 :(得分:5)

这是FAQ

  

如何计算两个数组的差异?如何计算两个数组的交集?

     

使用哈希。这是两个以上的代码。它假定每个   element在给定数组中是唯一的:

@union = @intersection = @difference = ();
%count = ();

foreach $element (@array1, @array2) { $count{$element}++ }

foreach $element (keys %count) {
    push @union, $element;
    push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
}
     

请注意,这是对称差异,即所有元素   A或B中,但两者都不是。把它想象成一个xor操作。

答案 1 :(得分:1)

是的,它被称为the intersection,并且有一个模块:Set::Intersection。虽然没用过它。

编辑:似乎Array::Utils似乎也有一个交叉方法,我会改用它。

如果您想自己编程,可以这样做:

  • 将值放入两个数组
  • 使他们独一无二(List::MoreUtils有一个uniq())
  • 使用哈希计算您看到每个值的次数
  • 从散列中获取值count = 2