2015-01-06 62 views
0

說我有一個像哈希:添加關鍵嵌套哈希在遍歷散列

myhash = {'key1': {'innerkey1': 'innervalue1', ...}, ...} 

我想遍歷這個哈希並添加鍵值對到內部哈希。上面的例子中變爲:

myhash = {'key1': {'innerkey1': 'innervalue1', 'addedkey': 'addedvalue', ...}, ...} 

我試圖與myhash.each do |k, v|,但是在塊改變v只有塊的範圍內,影響此散列。它通過在塊內做myhash[k]['addedkey'] = 'addedvalue'工作,但我想修改內部散列到位,不使用myhash來做到這一點。

我該如何在Ruby中做到這一點?

+0

'addedkey'嵌套在'myhash'你必須在上層開始。 – Anthony

+0

對不起,我還不完全明白你的意思。 – linkyndy

+0

您正試圖訪問內部哈希對象而不通過外部哈希對象,對吧? – Anthony

回答

2

使用Hash merge!方法:

myhash = { k1: { innerk1: 'innerv1' }, k2: { innerk2: 'innerv2' } } 

myhash.each do |key, value| 
    value.merge!({ addedk: 'addedv' }) 
end 

p myhash 

# {:k1=>{:innerk1=>"innerv1", :addedk=>"addedv"}, :k2=>{:innerk2=>"innerv2", :addedk=>"addedv"}} 
+0

謝謝,那就是我一直在尋找的! – linkyndy

+0

這比僅執行賦值要慢3倍,即'value ['addkey'] ='newvalue'' – Anthony

+0

但是爲什麼我的變化值並沒有反映出退出我做出更改的塊? – linkyndy