Ruby: merge nested hash

前端 未结 9 1914
渐次进展
渐次进展 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:43

    A little late to answer your question, but I wrote a fairly rich deep merge utility awhile back that is now maintained by Daniel Deleo on Github: https://github.com/danielsdeleo/deep_merge

    It will merge your arrays exactly as you want. From the first example in the docs:

    So if you have two hashes like this:

       source = {:x => [1,2,3], :y => 2}
       dest =   {:x => [4,5,'6'], :y => [7,8,9]}
       dest.deep_merge!(source)
       Results: {:x => [1,2,3,4,5,'6'], :y => 2}
    

    It won't merge :y (because int and array aren't considered mergeable) - using the bang (!) syntax causes the source to overwrite.. Using the non-bang method will leave dest's internal values alone when an unmergeable entity is found. It will add the arrays contained in :x together because it knows how to merge arrays. It handles arbitrarily deep merging of hashes containing whatever data structures.

    Lots more docs on Daniel's github repo now..

提交回复
热议问题