我有一个来自数据库查询的哈希值:
a1 = {:a => 1, :b => 2 }
第三方库的另一个哈希值:
b1 = {'a' => 1, 'b' => 2 }
我想看看是否a1
有'a'
我想考虑的等价于:a
. 这是怎么做的?b1
所以我可以检查in中是否缺少任何键a1
。
我想要的是把 key 和 key'a'
一样对待:a
。
给定 Hash 有几个选项h
:
您可以将所有键转换为字符串:
Hash[h.map { |k, v| [k.to_s, v] }]
您可以将所有键转换为符号:
Hash[h.map { |k, v| [k.to_sym, v] }]
您可以使用来自ActiveSupport(Rails 免费提供)的HashWithIndifferentAccess :
HashWithIndifferentAccess.new(h)
您可以使用to_sym
a.has_key?('a'.to_sym)
这将为您提供一个(字符串)键数组,b1
其中不存在(作为符号键)a1
:
b1.keys - a1.keys.map { |key| key.to_s }
然后你可以这样做:
missing = b1.keys - a1.keys.map { |key| key.to_s }
missing.each do |key|
a1[key.to_sym] = b1[key]
end
这是假设b1
始终只有字符串键,您只担心a1
缺少键/值对 from b1
,并且您的目标是将缺失的对插入a1
(使用符号键),从您的问题来看,所有这些听起来都是正确的。如果这些假设中的任何一个是错误的,这至少应该让你开始。