Clojure - map-indexed是否可以从0以外的索引开始?

时间:2014-02-23 11:23:33

标签: clojure

通常map-indexed函数将每个列表项映射到第一个索引为0的相应索引,第二个索引为1等。

是否可以让索引从另一个数字开始并从那里开始?

3 个答案:

答案 0 :(得分:10)

最简单的方法就是记住您可以将多个序列传递给map

(map vector [:a :b :c] (iterate inc 100))

=> ([:a 100] [:b 101] [:c 102])

答案 1 :(得分:9)

您只需使用接收函数中的另一个函数包装索引

例如,如果我们想从1开始而不是零,我们只需使用inc

(map-indexed (fn [i v] (vector (inc i) v)) ["one" "two" "three"])

将返回

([1 "one"] [2 "two"] [3 "three"])

答案 2 :(得分:4)

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])