"b"} hash2={:a => "c" } 当我在做hash1.merge!(hash2) 我得到的结果是 {"a"=>"b",-6ren">
gpt4 book ai didi

ruby - 哈希与以键为符号的哈希之一合并

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:31 25 4
gpt4 key购买 nike

我在 Ruby 中有两个像这样的散列

hash1={"a" = > "b"}
hash2={:a => "c" }

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

{"a"=>"b", :a=>"c"} 

我想得到 {"a"=> "c"} 的结果,基本上我希望 ruby​​ 将键值的符号和字符串视为相同。

我正在研究 Hash 类,但找不到任何方法。

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

最佳答案

ActiveSupport gem 有 Hash#stringify_keys在这种情况下有帮助的方法:

require 'active_support/hash_with_indifferent_access'

hash1 = { "a" => "b" }
hash2 = { :a => "c" }

hash1.merge(hash2.stringify_keys)
# => { "a" => "c" }

方法是这样实现的(简化):

class Hash
def stringify_keys
{}.tap do |result|
each_key { |key| result[key.to_s] = self[key] }
end
end
end

更新 引入了 Ruby 2.5.0 Array#transform_keys这将允许像这样在散列中对键进行字符串化:

hash1 = { "a" => "b" }
hash2 = { :a => "c" }

hash1.merge(hash2.transform_keys(&:to_s))
# => { "a" => "c" }

这意味着不再需要使用 ActiveSupport

关于ruby - 哈希与以键为符号的哈希之一合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com