1

私は2つの配列を持っています:

array1 = [3, 4, 4, 5, 6, 7, 8, 8]
array2 = [4, 5, 8, 8]

array1にあるの要素を削除したいのですarray2が、1 つのインスタンスにしかありません。結果の配列 は次のarray3ようになります。

array3 = [3, 4, 6, 7]

私は試した:

array3 = array1 - array2

しかし、結果は満足のいくものではありませんでした:

array3 -> [3, 6, 7]
4

2 に答える 2

1

これは、あなたが望むことを行うための最も効率的な方法ではないかもしれませんが、うまくいきます:

array1 = [3, 4, 4, 5, 6, 7, 8, 8]
array2 = [4, 5, 8, 8]
array2.each do |item|
    index = array1.index item
    array1.delete_at index if index
end
于 2013-02-14T14:07:07.047 に答える
0

物事を行う他の方法を示すためだけに必須ではありません。ファセットを使用して (ヒストグラムを取得するのに便利です)、これを書きます。の上):

require 'facets'

array3 = array1.reduce([array2.frequency, []]) do |(h, output), x|
  if h[x] && h[x] > 0
    [h.update(x => h[x] - 1), output]
  else
    [h, output << x] 
  end
end[1]
#=> [3, 4, 6, 7]

スニペットを純粋に機能させるには、Hash#update/Array:<< の代わりに Hash#merge/Array#+ を使用しますが、これらのデータ構造の性質により、非常に非効率的です。

于 2013-02-14T14:04:54.670 に答える