merge
是这样实现的:
(defn merge
;; stuff removed
[& maps]
(when (some identity maps)
(reduce1 #(conj (or %1 {}) %2) maps)))
从几个角度来看,这有点低效。与reduce
相比,reduce1
速度慢(当映射数量较少时可能不那么重要,但更重要的是,当你只想合并两个映射时,它会做很多不必要的工作,因为合并两个映射基本上是
(when (or m1 m2) (conj (or m1 {}) m2))
有一个针对此情况优化的多参数版本的merge
是否合理?
一个快速基准测试表明,在这种情况下潜在速度可以提高4倍。
我已经查看了Jira,但令人惊讶的是,我没能找到关于这个的票据?