比较基于哈希和键和值,以及 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.