@himik

Как установить значение элемента хеша по массиву ключей?

Имеется
hash = {:a => {:b => [{:c => old_val}]}}
keys = [:a, :b, 0, :c]
new_val = 10



В итоге нужно чтобы hash[:a][:b][0][:c] == new_val

Структура хеша и набор ключей могут произвольно меняться.
  • Вопрос задан
  • 2798 просмотров
Решения вопроса 1
@himik Автор вопроса
в общем, решение нашлось. всем спасибо )

a = {:a => {:b => [{:c => 1}]}}
b = [:a, :b, 0, :c]
d = b.pop
b.inject(a) {|s,k| s[k]}[d] = 20
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sl_bug
@sl_bug
вот вам костыль :) тут я думаю можно значительно улучшить.

temp = hash
keys[0..-2].each do |k|
  temp = temp.send(:'[]', k)
end
temp.send(:'[]=', keys.last, 10)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы