如果指定键的值在数组中相同,如何合并哈希

iro*_*and 5 ruby arrays hash

我有一系列像这样的哈希:

[ {:foo=>2, :date=>Sat, 01 Sep 2014},
 {:foo2=>2, :date=>Sat, 02 Sep 2014},
 {:foo3=>3, :date=>Sat, 01 Sep 2014},
 {:foo4=>4, :date=>Sat, 03 Sep 2014},
  {:foo5=>5, :date=>Sat, 02 Sep 2014}]
Run Code Online (Sandbox Code Playgroud)

如果:date相同,我想合并哈希.我对上面数组的期望是:

[ {:foo=>2, :foo3=>3, :date=>Sat, 01 Sep 2014},
 {:foo2=>2, :foo5=>5 :date=>Sat, 02 Sep 2014},
 {:foo4=>4, :date=>Sat, 03 Sep 2014}]
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

也许我应该重新考虑数据结构本身?例如,我应该使用date值作为哈希的键吗?

Cri*_*scu 8

这是你如何在一条线(演示)中做到这一点:

hashes.group_by{|h| h[:date] }.map{|_, hs| hs.reduce(:merge)}
Run Code Online (Sandbox Code Playgroud)

此代码执行以下操作:

  • 按其:date价值划分所有哈希值
  • 对于每个:date组,获取其中的所有哈希值并将它们全部合并为一个哈希值

编辑:由tokland和Cary Swoveland提出的应用修改.谢谢!