merge
实现如下
(defn merge
;; stuff removed
[& maps]
(when (some identity maps)
(reduce1 #(conj (or %1 {}) %2) maps)))
这从几个方面来看,都是有些次优的。由于reduce1
比reduce
慢(当映射数量较小时可能不影响,但更重要的是,如果你只想合并两个映射,它还会做很多不必要的操作,因为合并两个映射基本上是
(when (or m1 m2) (conj (or m1 {}) m2))
有这样一个merge
的多重参数版本来优化这种情况,是不是合理的呢?
一个快速的基准测试显示在这种情况下有可能将速度提高4倍。
我在 Jira 中查看了一下,但令人惊讶的是,我没有找到一个与此相关的工单?