-1

私はこの問題に苦しんでおり、それを行う方法がわかりません。2 つのハッシュがあるとします。

hash1 = { "address" => "address", "phone" => "phone }
hash2 = { "info" => { "address" => "x", "phone" => "y"}, 
          "contact_info" => { "info" => { "address" => "x", "phone" => "y"} }}

この出力を取得したい:

{ "info" => { "address" => "address", "phone" => "phone"},
  "contact_info" => { "info" => { "address" => "address", "phone" => "phone"} }}

試してみましHash#deep_mergeたが、問題は解決しません。私が必要としているのは、構造が何であれ、2 番目のハッシュの任意の場所にあるすべてのキーと値をマージするものです。

どうやってやるの?手がかりはありますか?

4

1 に答える 1

2

hash1 を再帰的にマージしたいと思いますか? 多分これ:

class Hash

  def deep_merge_each_key(o)
    self.keys.each do |k|
      if o.has_key?(k)
        self[k] = o[k]
      elsif self[k].is_a?(Hash)
        self[k].deep_merge_each_key(o)
      end
    end
    self
  end
end

h1 = {"address"=>"address", "phone"=>"phone"}
h2 = {
  "info" => { "address" => "x", "phone" => "y"},
  "contact_info" => { "info" => { "address" => "x", "phone" => "y"} }
}

puts h2.deep_merge_each_key(h1).inspect

# => {"info"=>{"address"=>"address", "phone"=>"phone"}, "contact_info"=>{"info"=>{"address"=>"address", "phone"=>"phone"}}}
于 2013-05-09T16:59:22.873 に答える