14

假设我有一个嵌套哈希:

h = { 'one' =>
        {'two' =>
            {'three' => 'a'}
        }
     }

我可以这样改变它:

h['one']['two']['three'] = 'b'

如何以变量为键更改嵌套值?

假设我有以下变量:

key = "one.two.three"

要动态访问它,我使用以下内容:

key.split('.').inject(h,:[])

但是当然这样设置是行不通的:

key.split('.').inject(h,:[]) = 'b' # fails

那么如何动态设置嵌套哈希的值呢?

4

1 回答 1

20

Hash#[]=是一个单一的方法。您不能Hash#[]一直到最后一个键并=对其进行操作。相反,请忽略最后一个键并Hash#[]=单独对其进行操作。

*key, last = key.split(".")
key.inject(h, :fetch)[last] = "b"
于 2013-01-12T15:28:10.973 回答