Re:日付のRangeを週に切り出すスクリプト
日付のRangeを週に切り出すスクリプト - はこべにっき# より。
元のテストを通るように書くとこんな感じ。tapかわいいよtap。inject もかわいいけどねー。
require 'date' # 1.8.7 以降では不要(ASR の最新は 1.8.6 だから…) class Object def tap yield(self) self end end def gen_week(range, week_start=1) [[]].tap do |weeks| range.each do |date| if date.wday == week_start and weeks.last.size != 0 weeks << [date] else weeks.last << date end end end.map{|week| week.first..week.last } end
これって、以前書いた 連続した数列を範囲形式にまとめたい とほとんど同じだなー。
追記
zt日記 に、1.8.7 以降で使用できる Enumerable#group_by による解法あり。簡潔だ…。