配列a = [1,1,1,2,2,3]
から要素を削除しようとしています。私は、次を実行した場合:配列から要素を削除するRuby
b = a - [1,3]
それから私は得るでしょう:
b = [2,2]
は、しかし、私は
b = [1,1,2,2]
つまり、私が唯一の各要素の1つのインスタンスを削除する結果になりたいです減算されたベクトルは全ての場合ではない。これを行うにはRubyに簡単な方法がありますか?
あなたが行うことができます配列a = [1,1,1,2,2,3]
から要素を削除しようとしています。私は、次を実行した場合:配列から要素を削除するRuby
b = a - [1,3]
それから私は得るでしょう:
b = [2,2]
は、しかし、私は
b = [1,1,2,2]
つまり、私が唯一の各要素の1つのインスタンスを削除する結果になりたいです減算されたベクトルは全ての場合ではない。これを行うにはRubyに簡単な方法がありますか?
あなたが行うことができます:
a= [1,1,1,2,2,3]
delete_list = [1,3]
delete_list.each do |del|
a.delete_at(a.index(del))
end
結果:[1、1、2、2]
したがって、配列減算は実際には互いに素になっていますか? –
Array Difference ---元の配列のコピーである新しい配列を返し、other_aryにも現れるすべての項目を削除します。 (もしset-likeの振る舞いが必要な場合は、ライブラリクラスSetを参照してください。)[link](http://www.ruby-doc.org/core-1.9.3/Array.html) – Norm212
すべてのインスタンスを削除する場合は'delete_list'にある項目のうち、あなたはこれを行うことができます。 'b = a.each.reject {| x | delete_list.each.include? x} ' – Archonic
非常にシンプルですがない:
a = [1,1,1,2,2,3]
b = a.group_by {|n| n}.each {|k,v| v.pop [1,3].count(k)}.values.flatten
=> [1, 1, 2, 2]
はまたにおける倍数のためのケースを扱います「減数」:
a = [1,1,1,2,2,3]
b = a.group_by {|n| n}.each {|k,v| v.pop [1,1,3].count(k)}.values.flatten
=> [1, 2, 2]
EDIT:これはmorですeは、Norm212と私の答えを組み合わせて機能的な解決策を作り出しました。必要に応じて
b = [1,1,3].each.with_object(a) { |del| a.delete_at(a.index(del)) }
ラムダでそれを入れて:その後、
subtract = lambda do |minuend, subtrahend|
subtrahend.each.with_object(minuend) { |del| minuend.delete_at(minuend.index(del)) }
end
:
subtract.call a, [1,1,3]
[1,3].inject([1,1,1,2,2,3]) do |memo,element|
memo.tap do |memo|
i = memo.find_index(e)
memo.delete_at(i) if i
end
end
あなたが引く場合は '[1,1,3]は'あなたが終了したいです'b = [1,2,2]'で始まる?それとも決して起こることはありませんか? – seph