Как обновить значение во вложенном ха sh заданном пути в ruby? - PullRequest
0 голосов
/ 20 марта 2020

Заданный путь в виде массива str_arr=["a", "b", "c", "d"], значение x=456 и га sh h={"a"=>{"b"=>{"c"=>{"d"=>123}}}}, обновление га sh со значением x. Поэтому после обновления оно должно быть {"a"=>{"b"=>{"c"=>{"d"=>456}}}}. Длина массива является переменной.

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Для этой цели вы можете использовать метод Hash#dig:

h.dig(*str_arr[0..-2])[str_arr.last] = x
# => 456
h
# => {"a"=>{"b"=>{"c"=>{"d"=>456}}}}
0 голосов
/ 20 марта 2020

Вот простое решение ruby, поскольку вы запросили ruby 2.1.4

str_arr = ["a", "b", "c", "d"]
h = {"a"=>{"b"=>{"c"=>{"d"=>123}}}}
x = 456

update_nested_hash(h, str_arr, x)
print h # {"b"=>{"c"=>{"d"=>456}}}}

def update_nested_hash(h, str_arr, x)
  a = str_arr.shift
  return h[a] = x if str_arr.empty?
  h[a][update_nested_hash(h[a], str_arr, x)]
end
...