Ruby on rails 在ruby中,在合并哈希时或之后进行排序
我有一个看起来像Ruby on rails 在ruby中,在合并哈希时或之后进行排序,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个看起来像 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"}}, {"proj
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,这应该可以做到。请注意,我已经解析了日期以便对其进行排序。将它们恢复到原始格式应该很简单
merged
是您提供的合并无序散列
merged.map{|k,v| { k => v.sort_by{|d,f| Date.strptime(d.split(',')[0],"%d %b %y").to_s } } }
您可能想考虑使用日期对象和数组,而不是散列,散列(至少在1.8.7中)是无序的。如何将它们转换为某种日期对象?看起来这是我唯一可用的选项。不过我不确定。有更好的方法,你可以在这里得到散列。是内部哈希需要按日期顺序排序吗?thnx。我更喜欢散列,因为我需要将此数据以json格式发送到客户端,在那里我可以将其转换回散列,以便快速访问。可以从排序的输出中删除日期吗?可以使用筛选方法删除它们: