Ruby)でブロックがtrueを返す最初の列挙可能な要素を取得する最速の方法は何ですか?
例えば:
arr = [12, 88, 107, 500]
arr.select {|num| num > 100 }.first # => 107
最初の一致のみが必要なため、select
と同様に、配列全体を実行せずにこれを実行したいと思います。
私はeach
を実行して成功を収めることができることを知っていますが、これを行うネイティブの方法があると思いました。私はドキュメントでそれを見つけていません。
いくつかのコアRuby Array
およびHash
を含むクラスには、 Enumerable
モジュールが含まれ、これらの列挙を処理します。
このモジュールは find
またはdetect
methods を提供し、実現したいことを正確に実行します。
arr = [12, 88, 107, 500]
arr.find { |num| num > 100 } # => 107
どちらのメソッド名も同義語であり、まったく同じです。
arr[arr.index {|num| num > 100 }] #=> 107
arr.find{|el| el>100} #107 (or detect; it's in the Enumerable module.)
これは、最初のレコードを取得するActiveRecord.findと、すべてのレコードを取得するときに使用するActiveRecord.selectを考えることで覚えています。
完璧な比較ではありませんが、覚えるのに十分かもしれません。