【发布时间】:2011-03-24 03:54:58
【问题描述】:
我需要非常有效地比较 Clojure/Java 中的两个映射,并返回由 Java 的 .equals(..) 确定的差异,其中 nil/null 相当于“不存在”。
即我正在寻找编写如下函数的最有效方法:
(map-difference
{:a 1, :b nil, :c 2, :d 3}
{:a 1, :b "Hidden", :c 3, :e 5})
=> {:b nil, :c 2, :d 3, :e nil}
我更喜欢不可变的 Clojure 映射作为输出,但如果性能提升显着,Java 映射也可以。
对于它的价值,我的基本测试用例/对行为的期望是,对于任何两个映射 a 和 b,以下内容将是相等的(直到 null = "Not present"):
a
(merge b (difference a b))
实现这一点的最佳方法是什么?
【问题讨论】:
-
老故事,但我想知道 Clojure 1.3 中的
clojure.data.diff将如何解决您的问题?
标签: java algorithm clojure hashmap