我需要过滤给定的向量,使输出只包含那些不是直接邻居的副本的元素.
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采用每个子列表的第一个元素,从而将列表列表展平为元素列表.
只需分别运行每个步骤,看看它是如何工作的.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |