2024 Clojure现状调查中分享你的想法!

欢迎!请参阅关于页面以了解有关此信息的工作方式。

+3
集合

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,但令人惊讶的是,我没能找到关于这个的票据?

2 个答案

+1
+1

是的,合并已经多年不好用。

https://github.com/bsless/clj-fast有一些带基准测试的替代方案。

还有许多不同的方法,以及在https://github.com/bsless/clj-fast/issues/1中的一些有趣的实现和注释。

欢迎使用Clojure问答社区,您可以在这里提问并从Clojure社区成员那里获得答案。
...