【发布时间】:2023-03-31 13:05:02
【问题描述】:
我有以下代码递增向量中每对的第一个元素:
(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与向量一起使用时,下面会发生什么?
相关但不重复的问题:
【问题讨论】: