Just do IT

思うは招く

Ruby の select と find の違い

たとえば以下の配列から、初めに見つかった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の倍数を見つけて、そこで探索を終了する。