1

次のような既存のハッシュの一部を変更したいアプリケーションに取り組んでいます。

{a: {b: {c: 23}}}

することが:

{a: {b: {c: [23]}}}

ただし、設定する正確なキーは動的であり、ハッシュの未知の深さにあります。キーの配列を指定してハッシュに値を設定する方法はありますか? 私は次のようなことを望んでいます:

my_hash['a','b','c'] = new_value

再帰を介して任意の深さから値を取得するのは簡単ですが、トラバーサルは参照ではなくデータのコピーで機能するため、トラバーサル中に配列全体を再構築せずに値を設定する方法がわかりません。

4

2 に答える 2

3

構文 ( ) を除いてmy_hash['a','b','c']、以下はあなたが望むことを行います

h = {a: {b: {c: { e: 23}}, d: 34}}
keys = ['a','b','c']

def replace_nested_value_by(h, keys, value)
  if keys.size > 1
    replace_nested_value_by(h[keys.first.to_sym], keys[1..-1], value)
  elsif keys.size == 1
    h[keys.first.to_sym] = value
  end
end

puts h
replace_nested_value_by(h, keys, 42)
puts h
于 2013-04-01T13:25:03.493 に答える