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などを使うのは再利用性が高い

References

results matching ""

    No results matching ""