Ruby Array: 配列の反対

概要

Ruby では、& 演算子を使用して 2 つの配列を交差させることができます。 交差点の残りの部分を取得しようとしています。

単純なケースを使用する場合は、 - で十分です。

array_1 = [0, 1]
array_2 = [0]
array_1 - array_2 => [1]

ここで、最初の配列に 0 が複数回出現すると想像してください。

array_1 = [0, 0, 1]
array_2 = [0]
array_1 - array_2 => [1]

最初の配列と最初の配列と 2 番目の配列の交点の差を取得する最も簡単な方法を知りたいです

array_1 = [0, 0, 1]
array_2 = [0]
array_1 ??? array_2 => [0, 1]

解決策

Ruby コアに追加してほしいと思われるメソッドを提案しました。使用例についてはリンクを参照してください。

class Array
  def difference(other)
    h = other.each_with_object(Hash.new(0)) { |e,h| h[e] += 1 }
    reject { |e| h[e] > 0 && h[e] -= 1 }
  end
end

a = [1,2,3,4,3,2,2,4] 
b = [2,3,4,4,4]

a.difference b
  #=> [1, 3, 2, 2]