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是否是可计数的
- 如果是:使用[3](#)MultiIterator
- 如果不是:将其转发到[4](#)map,如当前实现那样。
对此有何看法?或者这会破坏某些东西吗?