2013-01-12 38 views
12

Cho phép nói rằng tôi có một băm lồng nhau:Làm thế nào để thiết lập băm lồng nhau trong ruby ​​động?

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

tôi có thể thay đổi nó như thế này:

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

Làm thế nào tôi có thể thay đổi giá trị lồng nhau với một biến như một chìa khóa?

Hãy nói rằng tôi có biến sau đây:

key = "one.two.three" 

Để truy cập vào nó tự động, tôi sử dụng như sau:

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

Nhưng tất nhiên thiết lập nó như thế này không hoạt động:

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

Vậy làm cách nào tôi có thể đặt giá trị của băm lồng nhau động?

Trả lời

15

Hash#[]= là một phương pháp duy nhất. Bạn không thể làm Hash#[] tất cả các cách để phím cuối cùng và làm = với nó. Thay vào đó, hãy bỏ khóa cuối cùng và làm Hash#[]= riêng lẻ trên đó.

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

Tôi hiểu. Nice lời giải thích. – Markus

Các vấn đề liên quan