假设我有一个 vector :

(def data ["Hello" "World" "Test" "This"])

我想在具有api的地方填充表格:
(defn setCell
  [row col value]
  (some code here))

那么什么是使以下调用发生的最佳方法:
(setCell 0 0 "Hello")
(setCell 0 1 "World")
(setCell 0 2 "Test")
(setCell 0 3 "This")

我发现以下将起作用:
(let [idv (map vector (iterate inc 0) data)]
  (doseq [[index value] idv] (setCell 0 index value)))

但是,有没有一种不需要新的临时数据结构idv的更快的方法?

最佳答案

您的操作方式是惯用的(实际上与clojure.contrib.seq-utils/indexed相同)。如果您确实想避免多余的数据结构,则可以执行以下操作:

(loop [data data, index 0]
  (when (seq data)
    (setCell 0 index (first data))
    (recur (rest data) (inc index))))

除非有充分的理由,否则我会使用您的版本。

09-06 17:21