0

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

a1 = {:a => 1, :b => 2 }

第三方库的另一个哈希值:

b1 = {'a' => 1, 'b' => 2 }

我想看看是否a1'a'我想考虑的等价于:a. 这是怎么做的?b1所以我可以检查in中是否缺少任何键a1

我想要的是把 key 和 key'a'一样对待:a

4

3 回答 3

2

给定 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)
    
于 2012-07-13T02:28:30.053 回答
2

您可以使用to_sym

a.has_key?('a'.to_sym)
于 2012-07-13T01:54:50.653 回答
0

这将为您提供一个(字符串)键数组,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(使用符号键),从您的问题来看,所有这些听起来都是正确的。如果这些假设中的任何一个是错误的,这至少应该让你开始。

于 2012-07-13T02:11:56.187 回答