clojure中按身份划分重复数据如何消除集合?
矢量中的以下clojure代码重复数据消除元素:clojure中按身份划分重复数据如何消除集合?,clojure,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)) 它是如何完成重复数据消除的 我如何一步一步地看到生成的集合是如何构建的 如果您还没有看到它,请务必将其添加到书签中 单击具有良好信息和示例的partitionby 单击右上角以查看。查看第二个算术运算,它采用函数f和集合coll: ([f coll]
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))
如果您还没有看到它,请务必将其添加到书签中 单击具有良好信息和示例的
partitionby
单击右上角以查看。查看第二个算术运算,它采用函数f
和集合coll
:
([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
匹配的项,此时它将与第一个不匹配的项一起递归。按
分区不会消除任何重复数据,它只是根据f
为序列中的每个值返回的值将序列拆分为子序列。