Clojure - 映射索引是否可以从 0 以外的索引开始



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

最新更新