如何动态设置ruby中的嵌套哈希?

Mar*_*kus 12 ruby hash nested

可以说我有一个嵌套哈希:

h = { 'one' =>
        {'two' =>
            {'three' => 'a'}
        }
     }
Run Code Online (Sandbox Code Playgroud)

我可以这样改变它:

h['one']['two']['three'] = 'b'
Run Code Online (Sandbox Code Playgroud)

如何使用变量作为键来更改嵌套值?

假设我有以下变量:

key = "one.two.three"
Run Code Online (Sandbox Code Playgroud)

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

key.split('.').inject(h,:[])
Run Code Online (Sandbox Code Playgroud)

但是当然设置它不起作用:

key.split('.').inject(h,:[]) = 'b' # fails
Run Code Online (Sandbox Code Playgroud)

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

saw*_*awa 16

Hash#[]=是一种方法.你不能Hash#[]一直到最后一个键,并做到=这一点.相反,省略最后一个键并Hash#[]=单独执行.

*key, last = key.split(".")
key.inject(h, :fetch)[last] = "b"
Run Code Online (Sandbox Code Playgroud)