2013-01-12 39 views
12

可以說我有一個嵌套的哈希:如何動態設置ruby中的嵌套哈希?

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

我可以改變這樣的:

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

如何更改嵌套值與變量作爲重點?

比方說,我有以下變量:

key = "one.two.three" 

動態地訪問它,我用的是以下幾點:

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

但是,當然,設置像這樣不起作用:

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

那麼如何動態地設置嵌套哈希的值?

回答

15

Hash#[]=是一種單一的方法。你不能做Hash#[]一直到最後一個鍵,並做=它。相反,省略最後一個鍵並單獨做Hash#[]=

*key, last = key.split(".") 
key.inject(h, :fetch)[last] = "b" 
+0

我明白了。很好的解釋。 – Markus