Ruby での配列の遅延処理
- Ruby 2.0から使える
- Enumerable#lazy
- .lazyをつけることで利用できる
どこに使う?
- log fileなどfile sizeが大きなfileから特定条件のデータのみ抽出したいとか
- 無限のsizeの配列(終わりがわからない列)からfirst 100件とか抽出するとか
- 終わりがわからない列、例えばネットワークのstreammingされてくるデータから
例
Twitterでtwitをstreammingで返すデータから
TwitterPublicTimeline.each.lazy.map{|json| ...(json を加工する)...}
.select{|tweet| ...(条件にあうツイートなら true を返す)...}
.each{|tweet| p tweet}
lazyをつかわなかったらこのように書く
TwitterPublicTimeline.each do |json|
tweet = ...(json を加工する)...
next unless ...(条件)...
p tweet
end
- lazyを利用して map, selectなどを使うのは再利用性が高い