我怎样才能找到clojure中两个哈希向量的差异?

时间:2011-01-03 21:53:06

标签: clojure

我有一个向量,其中包含Clojure中的哈希映射列表,我在这个向量上有一个add-watch来查看所做的任何更改。是否有一种简单的方法可以对哈希映射所做的更改进行差异处理,这样我可以获得哈希中已更改条目的列表?

注意:这是我之前的一些帖子,我曾尝试将更改保存到数据库中以存储在ref中的数据结构。我已经意识到保存状态的最简单方法是查看ref以进行更改然后存储这些更改。我理想的解决方案是,如果add-watch也通过了更改列表:)

1 个答案:

答案 0 :(得分:1)

您可能需要更精确地定义“diff”。例如,向量中间的插入是作为单个更改计数还是作为该元素和所有后续元素的更改?您的矢量也保证长度相同吗?

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

  • 首先检查两个向量的长度。如果一个更长,则将额外元素视为更改
  • 然后使用not =将所有其他元素与另一个向量中的对应元素进行比较(这与哈希一起使用,并且在元素未更改的常见情况下将非常快)。让你入门的东西:( map not = vector-1 vector-2)
  • 如果您想确切了解两张地图的不同之处,可以使用pmf提到的stackoverflow.com/questions/3387155/difference-between-two-maps的答案。