假设我有一个 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))))
除非有充分的理由,否则我会使用您的版本。