2013-05-09 148 views
-1

我這個問題掙扎合併,我無法弄清楚如何做到這一點。讓我們假設我有兩個散列:深紅寶石不同哈希類型

hash1 = { "address" => "address", "phone" => "phone } 
hash2 = { "info" => { "address" => "x", "phone" => "y"}, 
      "contact_info" => { "info" => { "address" => "x", "phone" => "y"} }} 

我希望得到如下的輸出:

{ "info" => { "address" => "address", "phone" => "phone"}, 
    "contact_info" => { "info" => { "address" => "address", "phone" => "phone"} }} 

我試過Hash#deep_merge但它並沒有解決我的問題。我需要的是能夠合併第二個散列表中任何位置的所有鍵和值的東西,無論它的結構如何。

我該怎麼做?任何線索?

+0

你的表情是不是一個有效的Ruby對象。你的句子不是有效的英語。此外,它沒有任何問題。 – sawa 2013-05-09 16:30:57

回答

2

我想你想遞歸合併HASH1?也許這:

class Hash 

    def deep_merge_each_key(o) 
    self.keys.each do |k| 
     if o.has_key?(k) 
     self[k] = o[k] 
     elsif self[k].is_a?(Hash) 
     self[k].deep_merge_each_key(o) 
     end 
    end 
    self 
    end 
end 

h1 = {"address"=>"address", "phone"=>"phone"} 
h2 = { 
    "info" => { "address" => "x", "phone" => "y"}, 
    "contact_info" => { "info" => { "address" => "x", "phone" => "y"} } 
} 

puts h2.deep_merge_each_key(h1).inspect 

# => {"info"=>{"address"=>"address", "phone"=>"phone"}, "contact_info"=>{"info"=>{"address"=>"address", "phone"=>"phone"}}}