【问题标题】:How can I find out the diff of two vectors of hashes in clojure?如何找出clojure中两个哈希向量的差异?
【发布时间】:2011-06-03 02:06:33
【问题描述】:

我有一个向量,其中包含 Clojure 中的哈希映射列表,并且我在此向量上有一个添加监视以查看所做的任何更改。是否有一种简单的方法可以对哈希映射所做的更改进行比较,以便我可以获得哈希中已更改条目的列表?

注意:这是继我之前的一些帖子之后,我尝试将更改持久化到数据库中,以获取存储在 ref 中的数据结构。我已经意识到保存状态的最简单方法是观察 ref 的更改然后存储这些更改。我理想的解决方案是如果 add-watch 也传递了一个更改列表:)

【问题讨论】:

标签: clojure


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2019-06-27
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多