How to merge Ruby hashes

前端 未结 4 994
我寻月下人不归
我寻月下人不归 2020-11-28 08:45

How can I merge these two hashes:

{:car => {:color => \"red\"}}
{:car => {:speed => \"100mph\"}}

To get:

{:car          


        
4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-28 08:54

    There is a Hash#merge method:

    ruby-1.9.2 > a = {:car => {:color => "red"}}
     => {:car=>{:color=>"red"}} 
    ruby-1.9.2 > b = {:car => {:speed => "100mph"}}
     => {:car=>{:speed=>"100mph"}} 
    ruby-1.9.2 > a.merge(b) {|key, a_val, b_val| a_val.merge b_val }
     => {:car=>{:color=>"red", :speed=>"100mph"}} 
    

    You can create a recursive method if you need to merge nested hashes:

    def merge_recursively(a, b)
      a.merge(b) {|key, a_item, b_item| merge_recursively(a_item, b_item) }
    end
    
    ruby-1.9.2 > merge_recursively(a,b)
     => {:car=>{:color=>"red", :speed=>"100mph"}} 
    

提交回复
热议问题