2015-01-06 63 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