【发布时间】:2020-05-08 15:40:08
【问题描述】:
我有一个哈希-
h1 = {"a"=>{"x"=>"1","y"=>"2"}, "b"=>"z"}
我还有另一个哈希 h2,它基本上更新了 h1 中某些键的值
h2 = {"a"=>{"x"=>"3"}, "b"=>"q"}
当我做一个 -
h1.merge(h2)
我期待它回来-
{"a"=>{"x"=>"3","y"=>"2"}, "b"=>"q"}
但它实际上给了我-
{"a"=>{"x"=>"3"}, "b"=>"q"}
我需要做什么才能获得{"a"=>{"x"=>"3","y"=>"2"}, "b"=>"q"}?
我不使用 Rails。红宝石版本是2.6.0
【问题讨论】:
-
如果键在两者中都存在,则合并哈希的键值在所有情况下都会替换第一个。如果你有
h1 = {"a" => "x", "b" => {"a" => "4", "b" => "5"}和h2 = {"a" => {"f" => "1", "g" => "2"}, "b" => "y"},你希望它做什么? -
如果你不能使用 Rails 的 deep_merge,那么也许你想自己实现它。这里有一个非常优雅的 Ruby 解决方案:stackoverflow.com/a/32268934/1505529。但是,正如@lurker 所指出的,在您的情况下,值并不总是散列,您必须添加一些逻辑