散列与具有键作为符号的散列之一合并

use*_*987 1 ruby hash

我有这样的Ruby中的两个哈希

hash1={"a" = > "b"}
hash2={:a => "c" }
Run Code Online (Sandbox Code Playgroud)

当我在做hash1.merge时!(hash2)我得到的结果是

{"a"=>"b", :a=>"c"} 
Run Code Online (Sandbox Code Playgroud)

我想得到结果 {"a" => "c"}基本上我想要ruby将符号和字符串视为键值相同.

我正在研究Hash类,但无法找到任何方法.

问题是如何合并以使上述操作的结果为{"a"=>"c"}.

spi*_*ann 5

Rails的ActiveSupport gem有stringify_keys(见:http://apidock.com/rails/Hash/stringify_keys )方法来完成这项工作:

require 'active_support/hash_with_indifferent_access'
hash1 = { "a" => "b" }
hash2 = { :a  => "c" }

hash1.merge(hash2.stringify_keys)
# => { "a" => "c" }
Run Code Online (Sandbox Code Playgroud)

这就是gem在内部(简化)的作用:

class Hash
  def stringify_keys
    {}.tap do |result|
      each_key { |key| result[key.to_s] = self[key] }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)