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

Yec*_*kiy 5 clojure

通常,映射索引函数将每个列表项映射到相应的索引,其中第一个索引为0,第二个索引为1等.

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

dan*_*neu 10

最简单的方法就是记住你可以传递多个序列map.

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

=> ([:a 100] [:b 101] [:c 102])
Run Code Online (Sandbox Code Playgroud)


Kob*_*son 9

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

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

(map-indexed (fn [i v] (vector (inc i) v)) ["one" "two" "three"])
Run Code Online (Sandbox Code Playgroud)

将返回

([1 "one"] [2 "two"] [3 "three"])
Run Code Online (Sandbox Code Playgroud)


Mii*_*kka 5

map-indexed不允许这样做。但是,编写自己的版本来让您执行此操作很容易。

(defn map-indexed-from [n f coll]
  (map f (range n Double/POSITIVE_INFINITY) coll))
Run Code Online (Sandbox Code Playgroud)

用法示例:

user> (map-indexed-from 5 vector [:a :b :c])
([5 :a] [6 :b] [7 :c])
Run Code Online (Sandbox Code Playgroud)