以下clojure代码对向量中的元素进行重复数据删除:
user> (partition-by identity [1 2 2 3 3 3 4 2 2 1 1 1])
((1) (2 2) (3 3 3) (4) (2 2) (1 1 1))
答案 0 :(得分:1)
如果您还没有看到它,请确保将The Clojure CheatSheet添加为书签。
点击partition-by
takes you ClojureDocs.org并附带良好的信息和示例。
单击右上角以查看the Clojure source code。看一下第二个带有函数f
和集合coll
的arate:
([f coll]
(lazy-seq
(when-let [s (seq coll)]
(let [fst (first s)
fv (f fst)
run (cons fst (take-while #(= fv (f %)) (next s)))]
(cons run (partition-by f (seq (drop (count run) s))))))))
因此fst
是集合中的第一项,而fv
是使用函数f
的转换后的值。然后,它消耗所有与fv
匹配的项目,然后与第一个不匹配的项目一起递归。