Clojure循环从第n个元素开始的向量,而不是0

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

我想循环一个向量,从第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表单相同:

(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)