これよりもいくつかの条件を満たす配列内の最初の要素を見つけるためのより短い方法はありますか:
my_array[ my_array.index {|x| x.some_test} ]
これを試して:
my_array.find{|x| x.some_test }
または、ここにショートカットがあります(@LarsHaugsethに思い出させてくれてありがとう)
my_array.find(&:some_test)
私に関しては、紛らわしい音がします。私はそのような要求に対して複数のオブジェクトを受け取ることを期待しているので。
私は明確なものを得るために使用することを好みdetect
ます。
そしてselect
それらすべてを見つけるために。
ここにrubydocsがそれらについて語っています:
detect(ifnone = nil) {| obj | block } → obj or nil click to toggle source
find(ifnone = nil) {| obj | block } → obj or nil
detect(ifnone = nil) → an_enumerator
find(ifnone = nil) → an_enumerator
列挙型の各エントリをブロックに渡します。ブロックがfalseではない最初のものを返します。一致するオブジェクトがない場合は、ifnoneを呼び出して、指定されている場合はその結果を返します。それ以外の場合はnilを返します。
find_all {| obj | block } → array click to toggle source
select {| obj | block } → array
find_all → an_enumerator
select → an_enumerator
ブロックがfalseではない列挙型のすべての要素を含む配列を返します