2013-12-05 2 views
-1

Я пытаюсь превратить вход:рубин диапазон дат Hash

1.week.ago.to_date..Date.today 

В чем-то вроде этого:

{ 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', 4 => '6/4', 
      5 => '6/12', 6 => '6/21', 7 => '6/28' } 

Любые идеи, как я могу сделать это?

+0

Где значение (то, что, вероятно, является) дата взялся? – sawa

+0

Да, но по причинам, которые я не могу полностью защитить, мы не должны предоставлять код людям, которые еще не показали, что они уже пробовали. –

+0

@PeterAlfvin, я думал, это потому, что мы хотим «помогать» людям с их домашним заданием, а не делать это за них. Этот вопрос был бы намного лучше, если бы Роб представил примеры того, что не сработало для него. В противном случае мы просто делаем домашнее задание. –

ответ

1

Немного уборщик

h = {} 
(1.week.ago.to_date..Date.today).each {|x| h[h.count] = x.strftime("%m/%d")} 

h # => {0=>"11/28", 1=>"11/29", 2=>"11/30", 3=>"12/01", 4=>"12/02", 5=>"12/03", 6=>"12/04", 7=>"12/05"} 
0

Учитывая дату вы могли бы сделать что-то вроде:

p Hash[(0..7).map{|day| [day, (Date.today+day*7).strftime('%m/%d')]}] #=> {0=>"12/05", 1=>"12/12", 2=>"12/19", 3=>"12/26", 4... 
0

Есть вообще много способов кодировать любой нетривиальной конструкции в Ruby. Вот еще один:

range = 1.week.ago.to_date..Date.today 
array = range.each_with_index.map {|date, i| [i.to_s, date.strftime('%m/%d')]}.flatten 
Hash[*array] 
Смежные вопросы