我有以下代码递增向量中每对的第一个元素:
(vec (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
但是我担心这段代码不优雅,因为它首先使用 map 创建一个序列,然后将其转换回向量。
考虑这个类比:
(into [] (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
在#clojure@irc.freenode.net 上,有人告诉我,使用上面的代码很糟糕,因为into
展开成(reduce conj [] (map-indexed ...))
,在此过程中会产生许多中间对象。然后我被告知实际上into
不会扩展到(reduce conj ...)
并在可以时使用瞬变。还测量经过的时间表明into
实际上比 快vec
。
所以我的问题是:
map
在向量上使用的正确方法是什么?- 当我使用
vec
和into
使用向量时,下面会发生什么?
相关但不重复的问题: