185

Multisetというクラスにさまざまなメソッドを作成したいと考えています。

必要なメソッドはすべてありますが、intersection、union、およびsubset メソッドの書き方がわかりません。

交差と結合の場合、私のコードは次のように始まります。

def intersect(var)
  x = Multiset.new
end

次に例を示します。

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

Xとの交点Yは です[1, 2]

4

3 に答える 3

339

私は仮定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]

ソース

于 2011-04-15T14:21:57.010 に答える
160

&(交点)、-(差)、 (和集合)を実行することで、配列に対して集合操作を実行できるという事実を利用します|

明らかに、仕様どおりに 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]
于 2011-04-15T14:28:50.113 に答える