2010-12-27 6 views
2

私はrubyで配列を持っていますが、その上にdelete_ifブロックを実行できます。 問題は、配列から要素を削除することです。元の配列に変更を加えずに、オブジェクトを削除して新しい配列を返す以外は、同じ機能を使いたいと思います。例えばruby​​ soft delete_ifメソッド?

myarr = ["foo", 5, 7, "bar"] 
newarr = myarr.delete_if { |e| e.is_a?(String) } 

newarrに[5,7]を返すだけでなく、元の配列、myarrに変更を加えることになります。 newarr [5、7]の値を持つことになりますが、myarrはまだ同じ値を持つなるように

私は基本的に探していることは

myarr = ["foo", 5, 7, "bar"] 
newarr = myarr.soft_delete_if { |e| e.is_a?(String) } 

だろう。

このようなことはありますか? ありがとう!

答えて

7

rejectを使用してください。

> newarr = myarr.reject{ |e| e.is_a?(String) } 
=> [5, 7] 
> myarr 
=> ["foo", 5, 7, "bar"] 

は、述語がそれらを拒否する代わりにtrueを返す要素を保持し、それ以外rejectと同じように動作しますselectと呼ばれる関連方法もあります。

+0

あなたが 'accept'を書いたときにあなたは'選択 'を意味しました。 – sepp2k

+0

@ sepp2k:はい、今修正しました。ありがとうございます。 –

+0

ありがとうございました! –