通常map索引函数将每个列表项映射到相应的索引,其中第一个索引为0,第二个索引为1,依此类推。
是否可以让索引从另一个数字开始并从那里继续?
最简单的方法是记住您可以将多个序列传递给map
。
(map vector [:a :b :c] (iterate inc 100))
=> ([:a 100] [:b 101] [:c 102])
您只需在
接收函数中使用另一个函数包装索引即可
例如,如果我们想从 1 而不是零开始,我们只需使用 inc
(map-indexed (fn [i v] (vector (inc i) v)) ["one" "two" "three"])
会回来
([1 "one"] [2 "two"] [3 "three"])
map-indexed
不允许这样做。但是,编写自己的版本
很容易,让您做到这一点。(defn map-indexed-from [n f coll]
(map f (range n Double/POSITIVE_INFINITY) coll))
用法示例:
user> (map-indexed-from 5 vector [:a :b :c])
([5 :a] [6 :b] [7 :c])