split-at的clojure文档声明它采用元素集合并返回两个列表的向量,每个列表包含大于或小于给定索引的元素:
(split-at 2 [1 2 3 4 5])
[(1 2) (3 4 5)]
Run Code Online (Sandbox Code Playgroud)
我想要的是这个:
(split-at' 2 [1 2 3 4 5])
[[1 2] [3 4 5]]
Run Code Online (Sandbox Code Playgroud)
这是一个集合,分为两个集合,保持元素的顺序(如向量),最好没有性能损失.
通常的方法是什么,是否有任何性能优化的方法来做到这一点?
Dan*_*eal 12
如果您只使用向量,则可以使用一个选项subvec.
(defn split-at' [idx v]
[(subvec v 0 idx) (subvec v idx)])
(split-at' 2 [1 2 3 4 5])
;; => [[1 2] [3 4 5]]
Run Code Online (Sandbox Code Playgroud)
关于绩效,关于subvec国家的文件:
该操作是O(1)并且非常快,因为得到的矢量与原始矢量共享结构并且不进行修整.
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |