如何比较矢量中连续元素的值以进行过滤?

Sne*_*san 1 clojure

我需要过滤给定的向量,使输出只包含那些不是直接邻居的副本的元素.

Example : I/P -> [1 1 3 2 2 4 5 5]
          O/P -> [3 4]
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 8

(defn isolated [coll]
  (->> coll
       (partition-by identity)
       (remove next)
       (map first)))
Run Code Online (Sandbox Code Playgroud)

  • 罗.这是非常不言自明的,使用的功能很容易查找.如果Stack Overflow不想要这样的答案,欢迎他们删除它. (7认同)

ami*_*itr 6

这与@ 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采用每个子列表的第一个元素,从而将列表列表展平为元素列表.

只需分别运行每个步骤,看看它是如何工作的.