在迭代哈希时向嵌套哈希添加密钥

时间:2015-01-06 12:37:07

标签: ruby hash

说我有一个类似的哈希:

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

我想迭代这个哈希并将一个键值对添加到内部哈希中。以上示例变为:

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

我尝试使用myhash.each do |k, v|,但更改块中的v只会影响块范围内的哈希值。它通过在块内部执行myhash[k]['addedkey'] = 'addedvalue'来工作,但我想修改内部哈希,而不是使用myhash来执行此操作。

我如何在Ruby中执行此操作?

1 个答案:

答案 0 :(得分: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"}}