hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

Enumerable#detect

Arrayなどで配列を扱ってると、配列の中の一致する値を取り出したい場合があります。
下のコードを書いてコミットしたら、指摘されていいものを教えてもらったので、メモです。

array.each do |data|
  if data.to_i == 1
    return data
  end
end
nil

のように書いてチェックしてなかったらnilにするような処理を一括でやってくれるのがdetectです。
便利です。

array.detect do |data|
  data.to_i == 1
end

かなりシンプルになりました。
detectのいいところはブロックで受け取った評価に一致するデータを返却してくれて、一致するデータがなかった場合は、nilを返してくれます。
便利さに浸ってました。

Ruby Reference Manual