我有两个数据集,A和B.每个数据集的格式是每行一个数字。例如,
12345
23456
67891
2345900
12345
A中的一些数据未包含在数据集B中。如何列出A中的所有这些数据,以及如何列出A和B共享的所有这些数据。这是否可以在Perl中执行此操作?
答案 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似乎也有一个交叉方法,我会改用它。
如果您想自己编程,可以这样做: