我想为一个名为Multiset的类创建不同的方法.

我有所有必需的方法,但我不确定如何编写交集、并集和子集方法.

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

def intersect(var)
  x = Multiset.new
end

下面是一个例子:

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

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

推荐答案

利用这一事实,您可以通过执行&(相交)、-(差)和|(并集)对数组执行集合操作.

显然,我没有实现MultiSet to spec,但这应该让您开始:

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])

p x - y # [2,2,4]
p x & y # [1,3,5,6]
p x | y # [1,2,3,4,5,6]

Ruby相关问答推荐

如何通过语法将Ruby Sorbet签名突出显示为不强调的 comments ?

运行跳过的RSpec测试,如果通过则失败

如何判断 postgres 中使用 ruby​​ 的查询是否失败?

在Ruby中按字母顺序对数组中的数组进行排序?

如何使用 Ruby 的 optparse 解析没有名称的参数

如何替换 ruby​​ 中模式的每个实例?

Ruby 中的yield关键字有什么作用?

如何调试/显示使用 RestClient 发送的请求

判断文件是否包含字符串

在 Ruby 中将数组转换为索引哈希

您如何将 Cucumber 场景标记为待处理

如何判断我是从 JRuby 还是 Ruby 运行?

Ruby 中的 main是什么?

在 ruby​​ 中将每个数组元素添加到文件的行中

你能在 Python 的核心类型上修改补丁方法吗?

在 Ruby 中计算中位数

Ruby - time.now UTC

在类方法中使用实例变量 - Ruby

什么是 Rakefile?

如何重命名 gemset?