查看一个Ruby散列中是否存在另一个不存在的密钥的快速(甚至最快?)方式是什么?我假设哈希是最有效的数据结构,但我可以做任何事情,例如把东西放在一个Set中。
答案 0 :(得分:8)
a = { :a => 1, :b => 2 , :v => 3}
b = { :a => 3, :b => 22 , :g => 3}
a.keys - b.keys
#=> [:v]
b.keys - a.keys
#=> [:g]
答案 1 :(得分:3)
一种简单的方法就像:
hash1.keys - hash2.keys
您的结果是hash1
中不在hash2
答案 2 :(得分:1)
@fl00r's answer是我个人写的,因为它对我来说很快(编码器)。但是,既然你要求“快速”,并且可能意味着“快速使用电脑”,你应该知道每次调用它时都必须完全按下两组键。
如果您需要经常这样做,并且您真的只关心是否有任何键可能会丢失,您可能会这样做:
def same_keys?( a, b )
a.length == b.length && a.keys.all?{ |k| b.key?(k) }
end
如果没有相同数量的密钥,您会提前退出,并且一旦发现另一个密钥不存在,您就会提前退出。与使用数组集数学的更强大的答案不同,您不会发现一个哈希中存在多少个键或哪些键,而不是另一个哈希中的键。
注意:我有不对上述内容进行基准测试,以表明它会更快。鉴于数组数学是用C实现的,调用 all?
并为所有键调用 key?
方法可能比为你关心的许多哈希获得完整的差异。