多維哈希我有有一個類似的結構,東西兩個散列:合併在Ruby中
hash_a = { :a => { :b => { :c => "d" } } }
hash_b = { :a => { :b => { :x => "y" } } }
我想合併這些結合在一起,以產生以下散列:
{ :a => { :b => { :c => "d", :x => "y" } } }
的合併函數將取代第一個散列中的a值和第二個散列中的a值。所以,我寫我自己的遞歸合併功能,它看起來像這樣:
def recursive_merge(merge_from, merge_to)
merged_hash = merge_to
first_key = merge_from.keys[0]
if merge_to.has_key?(first_key)
merged_hash[first_key] = recursive_merge(merge_from[first_key], merge_to[first_key])
else
merged_hash[first_key] = merge_from[first_key]
end
merged_hash
end
但我得到一個運行時錯誤:can't add a new key into hash during iteration
。在Ruby中合併這些哈希的最佳方式是什麼?如果更改recursive_merge的第一線,
merged_hash = merge_to.clone
它按預期工作
class Hash
def recursive_merge(hash = nil)
return self unless hash.is_a?(Hash)
base = self
hash.each do |key, v|
if base[key].is_a?(Hash) && hash[key].is_a?(Hash)
base[key].recursive_merge(hash[key])
else
base[key]= hash[key]
end
end
base
end
end
謝謝你,我認爲這是一件愚蠢的事情。 – 2011-04-07 13:24:15