Clojure循环从第n个元素开始的向量,而不是0
我想循环一个向量,从第n个元素开始,不是0 它在Java中的外观:Clojure循环从第n个元素开始的向量,而不是0,clojure,Clojure,我想循环一个向量,从第n个元素开始,不是0 它在Java中的外观: for(int i = firstIndex; i <= lastIndex; i++) { newText += contents[i] + " "; } for(int i=firstIndex;i您可以使用drop函数跳过第一个n元素,然后在结果上循环。例如,如果要跳过前两个元素: user=> (drop 2 [1 2 3 4]) (3 4) 以下操作可能与您提供的Java表单相同: (requi
for(int i = firstIndex; i <= lastIndex; i++) {
newText += contents[i] + " ";
}
for(int i=firstIndex;i您可以使用drop
函数跳过第一个n
元素,然后在结果上循环。例如,如果要跳过前两个元素:
user=> (drop 2 [1 2 3 4])
(3 4)
以下操作可能与您提供的Java表单相同:
(require '[clojure.string :as str])
(str/join " " (drop first-index contents))
您可以使用drop
功能跳过第一个n
元素,然后在结果上循环。例如,如果要跳过前两个元素:
user=> (drop 2 [1 2 3 4])
(3 4)
以下操作可能与您提供的Java表单相同:
(require '[clojure.string :as str])
(str/join " " (drop first-index contents))
如果您总是处理向量,那么subvec
是一个不错的选择。例如:
(subvec contents firstIndex)
如果您想与一般序列兼容,您将需要使用drop
drop
是O(n)
w.r.t。被丢弃的元素数,subvec
始终是O(1)
。如果您只删除了几个元素,那么差异可以忽略不计。但是如果删除了大量元素(即大的firstIndex
),subvec
将是一个明显的赢家。但是subvec
仅在向量上可用。如果您总是处理向量,则subvec
是一个不错的选择。例如:
(subvec contents firstIndex)
如果您想与一般序列兼容,您将需要使用drop
drop
是O(n)
w.r.t。被丢弃的元素数,subvec
始终是O(1)
。如果您只删除了几个元素,那么差异可以忽略不计。但是如果删除了大量元素(即大的firstIndex
),subvec
将是一个明显的赢家。但是subvec
只在向量上可用。subvec
可能是一个选项,如果您知道元素计数,但我不知道哪一个更有效。@FrankC。如果起始索引较大,那么subvec
肯定会更有效。drop
是O(n)
w.r.t.subvec
的丢弃计数总是O(1)
subvec
如果您知道元素计数,但我不知道哪个更有效,则丢弃计数可能是一个选项。@FrankC.如果起始索引较大,则subvec
肯定会更有效。drop
是O(n)
w.r.t.subvec
的丢弃计数总是O(1)
。