我有这样的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"}.
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)