1

ブロックで提供された条件に基づいて配列から要素を削除し、その要素を返す簡単なRubyまたはRailsメソッドはありますか?

としましょう:

e1.good? # false
e2.good? # true
e3.good? # true
a = [e1, e2, e3]

これを行うメソッド delete_and_return_if はありますか:

a.delete_and_return_if { |e| e.good? }      # delete e2 from a and returns e2
[e1].delete_and_return_if { |e| e.good? }   # returns nil

または、少なくともこれを行うためのクリーンな方法はありますか?

4

4 に答える 4

1

delete_ifがあります。これはRuby関数です。http://www.ruby-doc.org/core-1.9.3/Array.html

于 2012-12-06T05:59:09.690 に答える
1

これにより、配列が更​​新され、削除されたエントリが返されます。

a = [1, 2, 3]

p a
# => [1, 2, 3]

deleted = a.delete a.detect {|e| e == 2 }
p deleted
# => 2

p a
# => [1, 3]

あなたはこのようにすることができます:

a.delete a.detect(&:good?)

更新:私を思い出してくれた@oldergodに感謝しますdetect

于 2012-12-06T06:05:29.840 に答える
1

重複がない場合、または同じ要素をすべて削除したい場合は、次のことができます

a.delete(a.detect(&:good?))
  • a.detect(&:good?)good?最初のオブジェクトを返すかnil、何もない場合は返します。
  • a.delete(elem)要素を削除して返します。

または、重複があり、最初のものだけを削除したい場合:

a.delete(a.index(a.detect(&:good?)))
于 2012-12-06T06:15:17.293 に答える
0
 a = [e1, e2, e3]

 a.delete_if{|e|!e.good?}

 it will delete e1. and returns e2 and e3
于 2012-12-06T06:02:32.930 に答える