2013-03-15 4 views
0

J'ai deux hash de hash qui ressemblent essentiellement comme:Fusionner deux hash de hash, sans chevauchement

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

et

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

Comment puis-je les fusionner en un seul hachage qui ressemble à:

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} 
    ... } 

Fondamentalement, j'ai besoin de garder les clés et toutes les données intactes.

data = views.merge sales Semble remplacer toutes les données de vues, me laissant avec fondamentalement juste le hachage des ventes.

Editer: Je peux également convertir les hachages de ventes ou de vues en hachages simples (pas de hachage), mais je ne sais toujours pas comment procéder.

Répondre

3

Ce:

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

exemple 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

J'ai confirmé que cela fonctionne dans Ruby 1.9.3. – corvec

+0

Fonctionne pour moi. Merci! – AlexQueue