Array#product

arikui1911さんに教えていただいたArray#productを使ってみた。Ruby 1.9系もしくはRuby 1.8.7以降で追加されたメソッドらしい。productって積ってことだから、集合の積だよね、まさにこれは求めていたものという気がする。

[1,2,3].product([4,5])     # => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
FRIDAY = 5
jason = Hash.new(0)
years = (1902..2037).to_a
months = (1..12).to_a

years.product(months).each do |y,m|
  if Time.mktime(y,m,13).to_a[6] == FRIDAY
    jason[y] = jason[y] + 1
  end
end

years.each do |y|
  print y, ":", jason[y], "\n"
end

ただまあ、今の例では年と月とをごっちゃにしてしまうと、結局年ごとの集計のために別途ハッシュを使ったりして面倒だという当たり前の事実があったりして……。

それにしても、どうせ趣味なんだし、Ruby1.8.6とか捨ててRuby1.9系だけ使っていればいいような気がしてきた。