2010-05-20 3 views
15

2 hachage:Ruby: fusionner deux hachage comme une seule et avec la valeur connectée

h1 = { "s1" => "2009-7-27", "s2" => "2010-3-6", "s3" => "2009-7-27" } 

h2 = { "s1" => "12:29:15", "s2" => "10:00:17", "s3" => "12:25:52" }  

Je veux fusionner les deux hachage comme l'un comme ceci:

h = { "s1" => "2009-7-27 12:29:15", 
     "s2" => "2010-3-6 10:00:17", 
     "s3" => "2009-7-27 2:25:52" } 

quelle est la meilleure façon de le faire ce? Merci!

Répondre

35
h = h1.merge(h2){|key, first, second| first + " " + second } 

Il fonctionnera si vos clés sont les mêmes. Dans votre code, ils ne sont pas ("s1" vs "s1 ="). Sont-ils supposés être les mêmes clés?

+0

merci beaucoup! les clés sont les mêmes. – www

+0

Merci d'avoir répondu Chubas. Mais, si 'h1' et' h2' n'ont pas les mêmes clés, la logique se brise. Une idée pour résoudre ce problème? –

2

Vous voulez dire:

Hash[h1.map{|k,v| [k, "#{v} #{h2[k]}"]}] 

=> {"s3"=>"2009-7-27 12:25:52", "s1"=>"2009-7-27 12:29:15", "s2"=>"2010-3-6 10:00:17"} 

Remarque hash ne sont pas ordonnés, si vous voulez un hachage commandé vous devez probablement regarder at this

+0

Votre lien "Regardez ça" est mort, Sam. –

+1

merci @MartinCleaver corrigé –