如何在clojure中找出两个散列向量的差异?

如何在clojure中找出两个散列向量的差异?,clojure,Clojure,我有一个向量,它包含Clojure中的哈希映射列表,我有一个对这个向量的附加监视,以查看所做的任何更改。有没有一种简单的方法来区分对散列映射所做的更改,这样我就可以得到散列中更改的条目的列表 注意:这是我之前的一些帖子的后续内容,我曾尝试将对存储在ref中的数据结构的更改持久化到数据库中。我意识到保存状态的最简单方法是观察ref的更改,然后存储这些更改。我的理想解决方案是,如果addwatch也被传递一个变更列表:)您可能需要更精确地定义“diff”。例如,在向量的中间插入作为一个单独的改变还是

我有一个向量,它包含Clojure中的哈希映射列表,我有一个对这个向量的附加监视,以查看所做的任何更改。有没有一种简单的方法来区分对散列映射所做的更改,这样我就可以得到散列中更改的条目的列表


注意:这是我之前的一些帖子的后续内容,我曾尝试将对存储在ref中的数据结构的更改持久化到数据库中。我意识到保存状态的最简单方法是观察ref的更改,然后存储这些更改。我的理想解决方案是,如果addwatch也被传递一个变更列表:)

您可能需要更精确地定义“diff”。例如,在向量的中间插入作为一个单独的改变还是作为元素的变化以及所有后续元素的插入?你的向量是否保证长度相同

话虽如此,简单的方法是:

  • 首先检查两个向量的长度。如果一个较长,则将额外的元素视为变化
  • 然后使用not=(使用散列运算,在元素未更改的常见情况下,这将非常快)将所有其他元素与其他向量中的对应元素进行比较。让你开始的东西:(map not=vector-1 vector-2)
  • 如果你想知道这两张地图到底有什么不同,你可以使用上面提到的pmf的答案

这看起来很相关:另一个问题是比较两个地图,我想比较两个向量