2016年4月26日火曜日

rubyのHashでeach_with_indexの使い方

rubyのHashでeach_with_index使う時に調べててなるほどと思ったので書きました。
まずはこういうHashがあるとします。
test = { english: 100, japanese: 90 }

普通にeach_with_indexを使うとこんな感じになるかと思います。
test.each_with_index do |obj, index|
 p obj
 p obj.class
 p index
end

[:english, 100]
Array
0
[:japanese, 90]
Array
1
この形だとせっかくHashなのにkeyとvalueを分けて取れないので以下のようにやるとよいようです。
test.each_with_index do |(key, val), index|
 p key
 p val
 p index
end

:english
100
0
:japanese
90
1
これは知らなかったのですごく便利。

参考URL
http://bismar.hatenablog.com/entry/2012/12/01/215111

2016年4月19日火曜日

rubyの日付をeachでまわす

rubyで特定の日付から数日分eachでループでまわしたいときがあって、
それをやるのに2度も同じところではまったので備忘メモです。

まずはダメなパターン
(Time.now..(Time.now + 6.days)).each do |day|
 p day
end

こっちはOKなパターン
(Date.today..(Date.today + 6.days)).each do |day|
  p day
end

Timeは数値ではないので、離散形式でテストされる。 しかしTimeを用いた範囲は離散範囲ではない。
ということで、Timeではだめなので、やるときにはDateでやるか、
eachじゃない回し方をするのがよさそうです。

参考URL
http://sekai.hateblo.jp/entry/2013/10/23/081950