按不同尺寸对seq进行分组 - Clojure

but*_*uns 3 clojure

我有以下数据:

(def letters [:a :b :c :d :e :f :g ])
(def group-sizes [2 3 2])
Run Code Online (Sandbox Code Playgroud)

什么是按大小分组字母的惯用方法,这样我得到:

[[:a :b] [:c :d :e] [:f :g]]
Run Code Online (Sandbox Code Playgroud)

谢谢.

Leo*_*hin 9

(->> group-sizes
     (reductions + 0)
     (partition 2 1)
     (map (partial apply subvec letters)))
Run Code Online (Sandbox Code Playgroud)

该算法要求输入coll letters是矢量并且至少具有所需的(apply + group-sizes)元素量.它返回mapv与输入向量共享结构的向量的惰性seq(或向量,如果使用).

由于subvec它们是在O(1)中创建的,因此总时间复杂度应该是O(N),其中N是(count group-sizes),与Diegos算法相比,其中N将是非常高的(count letters).