2013-03-15 64 views
0

我有散列看起来基本上是两个散列喜欢:合并散列值的两个散列,无重叠

sales = { 
    "2013-03-15": {sales: 5}, 
    "2013-03-14": {sales: 3}, 
    "2013-03-12": {sales: 8}, 
    ... } 

views = { 
    "2013-03-15": {views: 30}, 
    "2013-03-14": {views: 23}, 
    "2013-03-13": {views: 35}, 
    ... } 

我怎样才能把它们合并成一个单一的哈希值,看起来像:

data = { 
    "2013-03-15": {views: 30, sales: 5}, 
    "2013-03-14": {views: 23, sales: 3}, 
    "2013-03-13": {views: 35, sales: 0}, # or just {views: 35} 
    ... } 

基本上,我需要保持键和所有的数据完好无损。

data = views.merge sales似乎覆盖所有的视图数据,留给我基本上只是销售哈希。我也可以将销售或视图散列转换为简单散列(而不是散列哈希),但我仍然不知道继续进行的好方法。

回答

3

此:

sales.merge(views) { |k, o, n| o.merge(n) } 

Runnable的例子:

views = { 
    "2013-03-15" => {:views=> 30}, 
    "2013-03-14" => {:views=> 23}, 
    "2013-03-13" => {:views=> 35}, 
} 

sales = { 
    "2013-03-15" => {:sales=> 5}, 
    "2013-03-14" => {:sales=> 3}, 
    "2013-03-12" => {:sales=> 8}, 
} 

puts sales.merge(views) { |k, o, n| o.merge(n) } 
=> {"2013-03-15"=>{:sales=>5, :views=>30}, "2013-03-14"=>{:sales=>3, :views=>23}, "2013-03-12"=>{:sales=>8}, "2013-03-13"=>{:views=>35}} 
+0

我已经证实了这个作品用Ruby 1.9.3。 – corvec 2013-03-15 21:27:50

+0

适合我。谢谢! – AlexQueue 2013-03-15 21:30:33