62

これよりもいくつかの条件を満たす配列内の最初の要素を見つけるためのより短い方法はありますか:

my_array[ my_array.index {|x| x.some_test} ]
4

2 に答える 2

106

これを試して:

my_array.find{|x| x.some_test }

または、ここにショートカットがあります(@LarsHaugsethに思い出させてくれてありがとう)

my_array.find(&:some_test)
于 2012-11-12T07:32:59.640 に答える
4

私に関しては、紛らわしい音がします。私はそのような要求に対して複数のオブジェクトを受け取ることを期待しているので。

私は明確なものを得るために使用することを好み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ではない列挙型のすべての要素を含む配列を返します

于 2012-11-12T08:02:33.617 に答える