当前的mapv对于多个集合的执行如下
(into [] (map f c1 c2 c3))
我建议将其更改为
(let [it1 (clojure.lang.RT/iter c1)
it2 (clojure.lang.RT/iter c2)]
(loop [out (transient [])]
(if (and (.hasNext it1) (.hasNext it2))
(recur (conj! out (f (.next it1) (.next it2))))
(persistent! out))))
这将使速度提高5倍。
对于可变参数的情况,我们可以检查colls是否是{{计数的?}}
- 如果是:使用{{多迭代器}}
- 如果不是:像当前实现一样转交给{{map}}
对此有何看法?或者这个更改会不会破坏某些内容?