我有一个给定目录中的文件数据库及其哈希值,我以json格式存储,如此
{
"file_hashes": {
"./file1": [
hash1,
hash2,
hash3
],
"./file2": [
hash1,
hash2,
hash3
]
}
}
等等。
我需要获取指定目录中文件的校验和,并将它们与数据库进行比较,并返回两个哈希中都不存在的元素(即文件)。
如何有效地比较UNCOMMON元素的两个哈希值和过滤器?
答案 0 :(得分:2)
您是否在询问如何计算对称差异?
给定两个可能具有共同对的哈希值,并且这两个哈希值不是共同的:
hash1 = {:a => :b, :c => :d}
hash2 = {:a => :b, :e => :f}
路口:
Hash[hash1.to_a & hash2.to_a]
=> {:a=>:b}
联:
Hash[hash1.to_a | hash2.to_a]
=> {:a=>:b, :c=>:d, :e=>:f}
Symmetic Difference,使用union-intersection计算:
Hash[(hash1.to_a | hash2.to_a) - (hash1.to_a & hash2.to_a)]
=> {:c=>:d, :e=>:f}
对称差异,使用差异联合计算:
Hash[(hash1.to_a - hash2.to_a) | (hash2.to_a - hash1.to_a)]
=> {:c=>:d, :e=>:f}
如果您的哈希值很大,或嵌套,或者有其他复杂性,那么您需要阅读更好的解决方案。试试Ruby gem hashdiff。