Clojure中的按身份分区重复数据删除集合如何处理?

时间:2019-09-23 18:22:21

标签: clojure

以下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))
  1. 它如何完成重复数据删除?
  2. 如何逐步查看结果集合的构建方式?

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匹配的项目,然后与第一个不匹配的项目一起递归。