我有一个嵌套哈希:
hash = {
"a" => "a",
"b" => {
"c" => "c",
"d" => {
"e" => "e"
}
}
}
我有一个哈希:
new_value = {
"b.d.e" => "new value"
}
我需要某种“魔法”函数来替换hash["b"]["d"]["e"]
处的哈希值,例如:
magical_function(hash, new_value)
#=> hash = {
"a" => "a",
"b" => {
"c" => "c",
"d" => {
"e" => "new value"
}
}
}
我不知道怎么做。有人可以帮忙吗?
答案 0 :(得分:6)
如果以直接的方式实施它并不神奇:
merge_hash.each do |key, value|
parts = key.split('.')
leaf = parts.pop
target = parts.inject(hash) do |h, k|
h[k] ||= { }
end
target[leaf] = value
end
答案 1 :(得分:1)
这是另一种解决方案:
class Hash
def replace_value(*keys, value)
current = self
current = current[keys.shift] while keys.size > 1
current[keys.last] = value
end
end
通过调用hash.replace_value("b","d","e", "new_value")
来调用。