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 に答える