たとえば以下の配列から、初めに見つかった3の倍数を取り出したいとき。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
select
を使うとこうなる。
> nums.select { |num| (num % 3).zero? }.first => 3
これでも期待するデータを取得できるが、配列内のすべての要素をチェックしているため効率が悪い。最後のfirst
がそれを物語っている。first
を取り除いてみると、
> nums.select{|num| (num % 3).zero? } => [3, 6, 9]
となり、やはりすべての要素をチェックして無駄な配列を作っている。
こういった場合はfind
のほうが効率的だ。
> nums.find { |num| (num % 3).zero? } => 3
最初に3の倍数を見つけて、そこで探索を終了する。