2010-05-20 18 views
15

2 hash:Ruby: Scalanie dwóch hash jako jeden i wartości połączony

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

Chcę połączyć dwa hash jako jeden jak ten:

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

Jaki jest najlepszy sposób to zrobić to? dzięki!

Odpowiedz

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

będzie działać, jeśli klucze są takie same. W twoim kodzie nie są ("s1" vs "s1 ="). Czy to mają być te same klucze?

+0

dziękuję bardzo! klucze są takie same. – www

+0

Dzięki za odpowiedź na Chubas. Ale jeśli 'h1' i' h2' nie mają tych samych kluczy, logika się zepsuje. Masz pomysł, żeby to naprawić? –

2

chodziło Ci o:

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

Note hashe są nieuporządkowane, jeśli chcesz uporządkowaną hash prawdopodobnie trzeba spojrzeć at this

+0

Twój link "Spójrz na to" jest martwy, Sam. –

+1

dzięki @MartinCleaver poprawione –