2010-05-20 8 views
15

2 hash:Rubino: unire due hash come uno e con un valore collegato

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

voglio unire i due hash come uno come questo:

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

qual è il modo migliore per farlo Questo? Grazie!

risposta

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

Esso funziona se le chiavi sono gli stessi. Nel tuo codice, non lo sono ("s1" vs "s1 ="). Dovrebbero essere le stesse chiavi?

+0

grazie mille! le chiavi sono le stesse. – www

+0

Grazie per aver risposto a Chubas. Ma, se 'h1' e' h2' non hanno le stesse chiavi, la logica si interrompe. Qualche idea per risolvere questo problema? –

2

cercavi:

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

Nota hash non sono ordinati, se si vuole un hash ordinata probabilmente bisogno di guardare at this

+0

Il link "guarda questo" è morto, Sam. –

+1

grazie @MartinCleaver corretto –