2011-08-11 35 views

回答

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] 
3

一个简单的方法是一样的东西:

hash1.keys - hash2.keys 

你的结果是hash1不在hash2

1

@fl00r's answer的钥匙是什么,我会亲自写的,因为它是快我(编码员)。但是,由于您要求“快速”,并且可能意味着“对计算机来说很快”,所以您应该意识到,每次调用它时,都必须完全走完两组键。

如果你需要频繁地做到这一点,你真的只关心是否有任何键可能会丢失,你可能会做这样的事情:

def same_keys?(a, b) 
    a.length == b.length && a.keys.all?{ |k| b.key?(k) } 
end 

如果有AREN你早点出来相同数量的钥匙,并且一旦发现钥匙不存在于另一钥匙中,就立即提前退出。与使用数组集数学的更强大的答案不同,您不会发现一个哈希中存在多少个键或哪些键,而不是另一个中存在多少个键。

注:我有不是基准以上显示它会更快。假设数组计算是用C语言实现的,有可能对所有键调用方法可能比为您关心的许多哈希获得完整数组的差异要慢。

相关问题