Ruby: merge nested hash

前端 未结 9 1924
渐次进展
渐次进展 2020-11-30 06:25

I would like to merge a nested hash.

a = {:book=>
    [{:title=>\"Hamlet\",
      :author=>\"William Shakespeare\"
      }]}

b = {:book=>
    [{         


        
9条回答
  •  误落风尘
    2020-11-30 06:55

    I think Jon M's answer is the best, but it fails when you merge in a hash with a nil/undefined value. This update solves the issue:

    class ::Hash
        def deep_merge(second)
            merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
            self.merge(second, &merger)
        end
    end
    
    a.deep_merge(b)
    

提交回复
热议问题