如何获得Ruby中的交集,联合和数组的子集?

我想为一个名为Multiset的类创build不同的方法。

我有所有必需的方法,但我不确定如何编写交集,联合和子集方法。

对于交集和联合,我的代码是这样开始的:

def intersect(var) x = Multiset.new end 

这里是一个例子:

 X = [1, 1, 2, 4] Y = [1, 2, 2, 2] 

那么XY的交点就是[1, 2]

利用这个事实,你可以通过做(交集), - (区别)和|对数组进行操作 (联盟)。

显然我没有实现MultiSet规范,但这应该让你开始:

 class MultiSet attr_accessor :set def initialize(set) @set = set end # intersection def &(other) @set & other.set end # difference def -(other) @set - other.set end # union def |(other) @set | other.set end end x = MultiSet.new([1,1,2,2,3,4,5,6]) y = MultiSet.new([1,3,5,6]) px - y # [2,2,4] px & y # [1,3,5,6] px | y # [1,2,3,4,5,6] 

我假设XY是数组? 如果是这样,有一个非常简单的方法来做到这一点:

 x = [1, 1, 2, 4] y = [1, 2, 2, 2] # intersection x & y # => [1, 2] # union x | y # => [1, 2, 4] # difference x - y # => [4] 

资源