Rubyリファレンス: Home

find, detect (Enumerable)

Edit   History

標準クラス・モジュール > Enumerable > find, detect

enum.find(ifnone = nil) {|item| block }
enum.detect(ifnone = nil) {|item| block }

findメソッドは、要素を探して取り出します。ブロック引数itemに要素を入れながらブロックを繰り返し、ブロックが真が返したときは繰り返しを中断してその要素を返します。ブロックの戻り値がすべて偽であればnilを返します。

detectメソッドは、findの別名です。

次の例は、配列の中から7で割り切れる数を探します。

numbers = [38, 74, 56, 48, 87, 68, 81, 49]
puts numbers.find {|item| item % 7 == 0 }
56

次の例は、ハッシュから70以上の値を持つものを探します。

scores = { 'Alice' => 50, 'Bob' => 60, 'Carol' => 90, 'David' => 40 }
p scores.find {|k, v| v >= 70 }
["Carol", 90]

findメソッドの引数ifnoneProcなどcallメソッドをもつオブジェクトを指定すると、要素が見つからないときはそのオブジェクトのcallメソッドが返す値を返します。

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
proc = Proc.new { :not_found }
puts numbers.find(proc) {|item| item % 9 == 0 }
not_found

関連項目