如何获得Ruby中的交集,联合和数组的子集?
我想为一个名为Multiset的类创build不同的方法。
我有所有必需的方法,但我不确定如何编写交集,联合和子集方法。
对于交集和联合,我的代码是这样开始的:
def intersect(var) x = Multiset.new end
这里是一个例子:
X = [1, 1, 2, 4] Y = [1, 2, 2, 2]
那么X
和Y
的交点就是[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]
我假设X
和Y
是数组? 如果是这样,有一个非常简单的方法来做到这一点:
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]
资源