什么是快速(或者甚至是最快?)的方式来查看一个Ruby哈希中是否存在另一个不存在的关键字?我假设一个散列是最有效的数据结构,但是我对任何东西都是开放的,比如把东西放在Set中。查看一个散列中的密钥是否不存在于另一个散列中?
1
A
回答
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语言实现的,有可能对所有键调用方法可能比为您关心的许多哈希获得完整数组的差异要慢。
相关问题
- 1. 检查密钥是否存在于散列表中JSP Struts 2
- 2. 如何检查散列是否“完全”包含在另一个散列中?
- 3. 如何检查散列中的密钥是否存在(redis)?
- 4. LM散列,散列一个长于14个字符的密码
- 5. 无效密钥散列密钥散列不匹配任何存储的密钥散列
- 6. Android Facebook错误:无效密钥散列。密钥散列与任何存储的密钥散列不匹配
- 7. Perl:散列中数组的大小,在另一个散列
- 8. 是否更改散列内的散列不更新第一个?
- 9. 给定2个散列,我怎么能确定一个散列的整体存在于另一个中?
- 10. 如果密钥存在于散列中,则改变散列的值
- 11. 查看另一个列表中是否存在列表?
- 12. 如何将一个散列转换为另一个散列?
- 13. 从另一个散列创建一个散列
- 14. 按另一个散列中的值对散列进行排序
- 15. 根据另一个散列中的值替换散列值
- 16. 将密钥的值作为另一个密钥在同一散列中的值的一部分
- 17. 检查以查看列表是否存在于另一个列表中?
- 18. 在散列表中,密钥是否与相应的值一起存储?
- 19. 在任一个散列或散列
- 20. 作为数组的密钥散列 - 如何变成一个正常的散列?
- 21. 如何从两个散列创建单个散列,其中一个散列的值是另一个散列的键子集的子集?
- 22. sha256_crypt.encrypt总是返回另一个散列
- 23. 如何检查密钥和值是否已经存在于散列表
- 24. 是否有一个散列算法,在C#中产生64位散列大小?
- 25. 如何使用密钥将一个Perl散列转换为另一个?
- 26. 萨姆2散列用同一密钥
- 27. 有没有更好的方法来判断一个ruby散列是否在另一个散列?
- 28. 密钥散列:Facebook的SDK
- 29. Android的密钥散列
- 30. Facebook的Android密钥散列