假设我有一个嵌套哈希:
h = { 'one' =>
{'two' =>
{'three' => 'a'}
}
}
我可以这样改变:
h['one']['two']['three'] = 'b'
如何使用变量作为键来更改嵌套值?
假设我有以下变量:
key = "one.two.three"
要动态访问它,我使用以下内容:
key.split('.').inject(h,:[])
但当然设置它不起作用:
key.split('.').inject(h,:[]) = 'b' # fails
那么如何动态设置嵌套哈希的值?
答案 0 :(得分:15)
Hash#[]=
是一种方法。您不能Hash#[]
一直到最后一个密钥,并=
到它。相反,请省略最后一个密钥并单独执行Hash#[]=
。
*key, last = key.split(".")
key.inject(h, :fetch)[last] = "b"