我想通過從第n個元素開始的向量循環而不是0;Clojure通過從第n個元素開始的向量循環而不是0
它看起來像在Java中:
for(int i = firstIndex; i <= lastIndex; i++) {
newText += contents[i] + " ";
}
我想通過從第n個元素開始的向量循環而不是0;Clojure通過從第n個元素開始的向量循環而不是0
它看起來像在Java中:
for(int i = firstIndex; i <= lastIndex; i++) {
newText += contents[i] + " ";
}
可以使用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'可能是一個選項,但我不知道哪一個更有效。 –
@FrankC。如果起始索引很大,那麼'subvec'一定會更有效率。 'drop'是'O(n)'w.r.t. drop-count,'subvec'總是'O(1)'。 –
謝謝你@下降工作。 – user3602477