我需要过滤给定的向量,使输出只包含那些不是直接邻居的副本的元素.
Example : I/P -> [1 1 3 2 2 4 5 5]
O/P -> [3 4]
Run Code Online (Sandbox Code Playgroud)
(defn isolated [coll]
(->> coll
(partition-by identity)
(remove next)
(map first)))
Run Code Online (Sandbox Code Playgroud)
这与@ amalloy的答案完全相同,但它使用transducers
而不是线程宏(->>
).
(defn isolate [coll]
(transduce
(comp
(partition-by identity)
(remove next)
(map first))
conj coll))
Run Code Online (Sandbox Code Playgroud)
它应该更有效率,至少在大型集合上.
所述partition-by identity
分区COLL到相同的元件的子列表.在remove next
删除所有子列表,其next
不为零(即它们有一个以上的元素).最后一个map first
采用每个子列表的第一个元素,从而将列表列表展平为元素列表.
只需分别运行每个步骤,看看它是如何工作的.