我正在开发一个应用程序,我想在其中修改现有散列的一部分,如下所示:
{a: {b: {c: 23}}}
成为:
{a: {b: {c: [23]}}}
但是,要设置的确切键是动态的,并且在哈希中的深度未知。有没有办法在给定键数组的情况下在散列中设置值?我希望是这样的:
my_hash['a','b','c'] = new_value
通过递归从任意深度获取值很简单,但是由于遍历是对数据的副本而不是引用进行的,所以我不知道在遍历期间不重建整个数组的情况下设置值的方法。
最佳答案
除了语法 (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
关于ruby - 在任意位置设置哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15744195/