如何为嵌套哈希添加值?

Max*_*Max 0 ruby hash

我有一个嵌套哈希:

hash = {
  "a" => "a",
  "b" => {
    "c" => "c",
    "d" => {
      "e" => "e"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个哈希:

new_value = {
  "b.d.e" => "new value"
}
Run Code Online (Sandbox Code Playgroud)

我需要某种"魔法"函数来替换散列值hash["b"]["d"]["e"],如:

magical_function(hash, new_value)
#=> hash = {
      "a" => "a",
      "b" => {
        "c" => "c",
        "d" => {
          "e" => "new value"
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

我不知道怎么做.有人可以帮忙吗?

tad*_*man 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
Run Code Online (Sandbox Code Playgroud)