我的哈希值似乎是
myhash = [{"project 1"=>{"09 Apr 12, Mon"=>"2.75"}}, {"project 1"=>{"11 Apr 12,
Wed"=>"3.200000047683716"}}, {"project 1"=>{"25 Apr 12, Wed"=>"0.5099999904632568"}},
{"project 1"=>{"31 May 12, Thu"=>"1"}}, {"project 1"=>{"01 Jun 12, Fri"=>"1"}}, {"project
2"=> {"01 Jun 12, Fri"=>"0"}}, {"project 1"=>{"04 Jun 12, Mon"=>"0.25"}}]
我想根据键来合并内部哈希值。这样钥匙不会重复
我试过了,
myhash.inject{|memo, el| memo.merge( el ){|k, old_v, new_v| old_v.merge(new_v)}}
正在给出正确的结果
=>{"project 2"=>{"01 Jun 12, Fri"=>"0"}, "project 1"=>{"01 Jun 12, Fri"=>"1", "09 Apr
12, Mon"=>"2.75", "11 Apr 12, Wed"=>"3.200000047683716", "31 May 12, Thu"=>"1", "25 Apr
12, Wed"=>"0.5099999904632568", "04 Jun 12, Mon"=>"0.25"}}
但订单丢失了。如何根据哈希内部键的日期对哈希进行排序。
或在合并本身时保持秩序。
我正在使用ruby 1.8.7
答案 0 :(得分:2)
这应该这样做。请注意,我已经解析了日期以便对它们进行排序。将它们恢复为原始格式应该是微不足道的。 merged
是您提供的合并无序哈希。
merged.map{|k,v| { k => v.sort_by{|d,f| Date.strptime(d.split(',')[0],"%d %b %y").to_s } } }
您可能想要考虑使用Date对象和数组而不是哈希值(至少在1.8.7中)是无序的。