web-dev-qa-db-ja.com

Rubyでブロックがtrueを返す最初の列挙可能な要素を取得するための最速の方法は何ですか?

Ruby)でブロックがtrueを返す最初の列挙可能な要素を取得する最速の方法は何ですか?

例えば:

arr = [12, 88, 107, 500]
arr.select {|num| num > 100 }.first  # => 107

最初の一致のみが必要なため、selectと同様に、配列全体を実行せずにこれを実行したいと思います。

私はeachを実行して成功を収めることができることを知っていますが、これを行うネイティブの方法があると思いました。私はドキュメントでそれを見つけていません。

38
Nathan Long

いくつかのコアRuby ArrayおよびHashを含むクラスには、 Enumerable モジュールが含まれ、これらの列挙を処理します。

このモジュールは findまたはdetect methods を提供し、実現したいことを正確に実行します。

arr = [12, 88, 107, 500]
arr.find { |num| num > 100 } # => 107

どちらのメソッド名も同義語であり、まったく同じです。

71
Holger Just
arr[arr.index {|num| num > 100 }] #=> 107
5
Michael Kohl
arr.find{|el| el>100} #107 (or detect; it's in the Enumerable module.)
2
steenslag

これは、最初のレコードを取得するActiveRecord.findと、すべてのレコードを取得するときに使用するActiveRecord.selectを考えることで覚えています。

完璧な比較ではありませんが、覚えるのに十分かもしれません。

0
calasyr