Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在ruby中,在合并哈希时或之后进行排序_Ruby On Rails_Ruby - Fatal编程技术网

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格式发送到客户端,在那里我可以将其转换回散列,以便快速访问。可以从排序的输出中删除日期吗?可以使用筛选方法删除它们: