Rubyで大きな配列から特定の要素を抜き出すとき、普通のselect使うのとLazyのselect使うのどっちが速いの?

多分Lazy使ったほうが速いんじゃないかと思ってベンチマークしてみました。

ただし状況による

ハッシュの配列から、ハッシュ内に特定のキーワードを持つハッシュを抽出するという処理で比較してみました。

というわけでまずは抽出したものを全件Arrayのインスタンスにしなおすという処理の結果から。

処理速度は同じですね。そりゃー、全件出しちゃうなら普通のEnumratorでもLazyなEnumratorでも変わりませんよねー。

次は抽出したものの中から最初の10件を取得するという処理を。

Lazyな方が圧倒的に速いですね。件数を絞るなら、Lazyを利用すると取得したい件数分の処理しか行わないため高速になります。というわけで、件数絞るならLazyの方が速いということになりますね。

参考:全件取得したら重すぎて死んでしまうようなAPIの返り値を絞り込んで取得したい(Lazy Enumratorの話)