比较基于哈希和键和值,以及 return 个不常见的元素
Compare hashes based and key and value, and return elements which are not common
我有一个给定目录中的文件及其哈希值的数据库,我以 json 格式存储这些文件
{
"file_hashes": {
"./file1": [
hash1,
hash2,
hash3
],
"./file2": [
hash1,
hash2,
hash3
]
}
}
等等。
我需要获取指定目录中文件的校验和,并将它们与数据库和 return 两个散列中都不存在的元素(即文件)进行比较。
我如何有效地比较两个哈希并过滤不常见的元素?
你是问如何计算对称差吗?
给定两个散列,它们可能有共同的对,也有不共同的对:
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}
对称差,使用并集-交集计算:
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.
我有一个给定目录中的文件及其哈希值的数据库,我以 json 格式存储这些文件
{
"file_hashes": {
"./file1": [
hash1,
hash2,
hash3
],
"./file2": [
hash1,
hash2,
hash3
]
}
}
等等。
我需要获取指定目录中文件的校验和,并将它们与数据库和 return 两个散列中都不存在的元素(即文件)进行比较。
我如何有效地比较两个哈希并过滤不常见的元素?
你是问如何计算对称差吗?
给定两个散列,它们可能有共同的对,也有不共同的对:
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}
对称差,使用并集-交集计算:
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.