我有一个来自数据库查询的值哈希:
a1 = {:a => 1, :b => 2 }
第三方库的另一个值哈希:
b1 = {'a' => 1, 'b' => 2 }
我想看看a1
是否有'a'
我想考虑相当于:a
。 这是怎么做到的? 所以我可以检查a1
中是否有任何b1
缺少密钥.
我想要的是将密钥'a'
视为与密钥:a
相同。
to_sym
a.has_key?('a'.to_sym)
给定哈希h
,您有几个选项:
-
您可以将所有键转换为字符串:
Hash[h.map { |k, v| [k.to_s, v] }]
-
您可以将所有键转换为符号:
Hash[h.map { |k, v| [k.to_sym, v] }]
-
您可以使用来自ActiveSupport的HashWithIndifferentAccess(免费附带Rails(:
HashWithIndifferentAccess.new(h)
这将为您提供一个(字符串(键数组,这些键来自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
总是只有字符串键,你只担心b1
中缺少a1
键/值对,你的目标是将缺失的键对插入a1
(使用符号键(,所有这些都听起来像你的问题。 如果这些假设中的任何一个是错误的,这至少应该让你开始。