比较散列和键和值,并返回不常见的元素

时间:2015-01-02 04:49:54

标签: ruby

我有一个给定目录中的文件数据库及其哈希值,我以json格式存储,如此

{
    "file_hashes": {
        "./file1": [
            hash1,
            hash2,
            hash3
        ],
        "./file2": [
            hash1,
            hash2,
            hash3
        ]
    }
 }

等等。

我需要获取指定目录中文件的校验和,并将它们与数据库进行比较,并返回两个哈希中都不存在的元素(即文件)。

如何有效地比较UNCOMMON元素的两个哈希值和过滤器?

1 个答案:

答案 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