Arrays 在Ruby中合并嵌套哈希而不覆盖

Arrays 在Ruby中合并嵌套哈希而不覆盖,arrays,ruby,hash,Arrays,Ruby,Hash,检查此网站和其他网站后,我无法实现以下转换: 我有这个: {"a"=>"text"} {"b"=>{"x"=>"hola"}} {"b"=>{"y"=>"pto"} } 我想得到: {"a"=>text, b=>{"x" => "hola", "y" => "pto" } } 到目前为止,代码似乎是这样的: tm =[[["a"],"text"],[["b","x"],"hola"],[["b","

检查此网站和其他网站后,我无法实现以下转换:

我有这个:

{"a"=>"text"}
{"b"=>{"x"=>"hola"}}
{"b"=>{"y"=>"pto"}
}

我想得到:

{"a"=>text,
    b=>{"x" => "hola",
        "y" => "pto"    
    }
}
到目前为止,代码似乎是这样的:

tm =[[["a"],"text"],[["b","x"],"hola"],[["b","y"],"pto"]]

q = {}
tm.each do |l|
    q = l[0].reverse.inject(l[1]) { |p, n| { n => p } }
    i += 1

end
我尝试了
merge
,但它覆盖了键!。我也尝试过这个,但它一直覆盖

更新:

如何为未定义的嵌套哈希(级别)执行此操作<代码>哈希[key1][key2][key3]…=“值”


您可以使用
merge
和一个块来告诉Ruby如何处理重复键:

a = {"a"=>"text"}
b = {"b"=>{"x"=>"hola"}}
c = {"b"=>{"y"=>"pto"}}

a.merge(b).merge(c) { |key, left, right| left.merge(right) }
#=> {"a"=>"text", "b"=>{"x"=>"hola", "y"=>"pto"}}

您可以使用
merge
和一个块来告诉Ruby如何处理重复键:

a = {"a"=>"text"}
b = {"b"=>{"x"=>"hola"}}
c = {"b"=>{"y"=>"pto"}}

a.merge(b).merge(c) { |key, left, right| left.merge(right) }
#=> {"a"=>"text", "b"=>{"x"=>"hola", "y"=>"pto"}}

您可以使用
merge
和一个块来告诉Ruby如何处理重复键:

a = {"a"=>"text"}
b = {"b"=>{"x"=>"hola"}}
c = {"b"=>{"y"=>"pto"}}

a.merge(b).merge(c) { |key, left, right| left.merge(right) }
#=> {"a"=>"text", "b"=>{"x"=>"hola", "y"=>"pto"}}

您可以使用
merge
和一个块来告诉Ruby如何处理重复键:

a = {"a"=>"text"}
b = {"b"=>{"x"=>"hola"}}
c = {"b"=>{"y"=>"pto"}}

a.merge(b).merge(c) { |key, left, right| left.merge(right) }
#=> {"a"=>"text", "b"=>{"x"=>"hola", "y"=>"pto"}}
对于Rails,有一个用于
ActiveSupport
的函数,它完全满足您的要求

您可以按如下方式为自己实现相同的功能:

class ::Hash
    def deep_merge(second)
        merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
        self.merge(second, &merger)
    end
end
现在,

对于Rails,有一个用于
ActiveSupport
的函数,它完全满足您的要求

您可以按如下方式为自己实现相同的功能:

class ::Hash
    def deep_merge(second)
        merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
        self.merge(second, &merger)
    end
end
现在,

对于Rails,有一个用于
ActiveSupport
的函数,它完全满足您的要求

您可以按如下方式为自己实现相同的功能:

class ::Hash
    def deep_merge(second)
        merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
        self.merge(second, &merger)
    end
end
现在,

对于Rails,有一个用于
ActiveSupport
的函数,它完全满足您的要求

您可以按如下方式为自己实现相同的功能:

class ::Hash
    def deep_merge(second)
        merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
        self.merge(second, &merger)
    end
end
现在,


这工作得非常好,但我忘了说我需要这个用于未定义的嵌套级别。这适用于最多2个级别。我更新了我的问题。这个效果很好,但我忘了说我需要这个用于未定义的嵌套级别。这适用于最多2个级别。我更新了我的问题。这个效果很好,但我忘了说我需要这个用于未定义的嵌套级别。这适用于最多2个级别。我更新了我的问题。这个效果很好,但我忘了说我需要这个用于未定义的嵌套级别。这适用于最多2个级别。我更新了我的问题。那个被否决的人没有理由。没有研究工作?我想我的问题比这个好多了。这个问题有很多赞成票。下次别开玩笑了,被否决的人没有理由。没有研究工作?我想我的问题比这个好多了。这个问题有很多赞成票。下次别开玩笑了,被否决的人没有理由。没有研究工作?我想我的问题比这个好多了。这个问题有很多赞成票。下次别开玩笑了,被否决的人没有理由。没有研究工作?我想我的问题比这个好多了。这个问题有很多赞成票。下次不要为了好玩而这样做。使用deep_,merge可以顺利地递归工作。ThxWith deep_merge以递归方式平滑运行。ThxWith deep_merge以递归方式平滑运行。ThxWith deep_merge以递归方式平滑运行。谢谢