删除clojure中的重复项

Nir*_*han 1 clojure

我有一个序列,并试图删除重复

case 1: 

(vec (into #{} [1 1 2 2 3 3])) ; => [1 2 3]


case 2:

(distinct [1 1 2 2 3 3]) ; => [1 2 3]
Run Code Online (Sandbox Code Playgroud)
  1. 两种情况都会带来结果,哪一个更好用?
  2. 这些有什么区别?

exu*_*ero 5

至于差异,jas在他的评论中涵盖了大部分内容:

  1. distinct 很懒
  2. distinct 没有参数的是换能器
  3. distinct 维持秩序

至于哪一个是首选,distinct是出于上述原因,还因为它解释了你需要什么.我忘了哪本Lisp书谈过这个(可能是Let Over Lambda),但是当给出两个相似函数之间的选择时,更喜欢那个更具体的函数.distinct解释说你想要不同的元素.(into #{} xs)可能会产生不同的值,但它也会让你的意图被误解.出于某种原因,有人可能很容易认为你想要一套.distinct缩小原因.