:thingo v 'thingo' 与 Ruby 哈希值



我有一个来自数据库查询的值哈希:

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(使用符号键(,所有这些都听起来像你的问题。 如果这些假设中的任何一个是错误的,这至少应该让你开始。

最新更新