1. ホーム
  2. ruby

[解決済み] Ruby で配列の交差、和集合、部分集合を得るにはどうしたらよいですか?

2022-04-15 17:45:12

質問

というクラスに対して、異なるメソッドを作成したいのです。 マルチセット .

必要なメソッドは揃っているのですが、intersection、union、subsetのメソッドの書き方がよくわかりません。

交差点と和集合については、私のコードはこのように始まります。

def intersect(var)
  x = Multiset.new
end

以下はその例です。

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

の交点は XY[1, 2] .

解決方法は?

を行うことで、配列のセット操作を行うことができることを利用し、配列のセット操作を行うことができます。 & (交差点)になります。 - (差)、および | (union)です。

もちろん、私は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])

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