删除clojure中的重复项
我有一个序列,正在尝试删除重复项删除clojure中的重复项,clojure,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] 这两种情况都会带来结果,那么哪种情况更适合使用呢 这两者有什么区别 至于差异,jas在其评论中涵盖了大部分差异: distinct是惰性的 distinct不带参数是传感器 distinct维持秩序 至于哪一个是首选的,distinct是出于上述
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]
至于差异,jas在其评论中涵盖了大部分差异:
distinct
是惰性的distinct
不带参数是传感器distinct
维持秩序至于哪一个是首选的,
distinct
是出于上述原因,但也因为它解释了您需要什么。我忘记了哪本Lisp书谈到过这个(可能已经忽略了Lambda),但是如果要在两个类似的函数之间进行选择,请选择更具体的函数distinct
说明您需要不同的元素(into#{}xs)
可能会产生不同的值,但它也会让您的意图被误解。有人很容易认为你出于某种原因想要一套distinct
缩小了原因。至于差异,jas在他的评论中涵盖了大部分差异:
distinct
是惰性的distinct
不带参数是传感器distinct
维持秩序至于哪一个是首选的,
distinct
是出于上述原因,但也因为它解释了您需要什么。我忘记了哪本Lisp书谈到过这个(可能已经忽略了Lambda),但是如果要在两个类似的函数之间进行选择,请选择更具体的函数distinct
说明您需要不同的元素(into#{}xs)
可能会产生不同的值,但它也会让您的意图被误解。有人很容易认为你出于某种原因想要一套distinct
缩小了原因的范围。如果我错了,请有人纠正我,但我认为一个很大的区别是distinct
将返回一个惰性序列,因此可以有效地用于非常大(甚至无限)的集合into
在下面使用reduce
,因此必须在前面遍历集合(我认为)。另外,distinct
将保持其元素的顺序,而into
可能会混淆它们。如果这些都不是问题,那么distinct肯定有优势,可以清楚地说出它在做什么。吹毛求疵:集合会把它们混在一起(集合中的值会混在一起)。同样,在没有vec的情况下,生成的集合可以作为一个函数,稍后可以使用。因此,对于“更好”的定义,要么对答案中已经存在的内容使用distinct,要么只使用集合(无vec)。如果我错了,请有人纠正我,但我认为一个很大的区别是distinct
将返回一个惰性序列,因此可以有效地用于非常大(甚至无限)的集合into
在下面使用reduce
,因此必须在前面遍历集合(我认为)。另外,distinct
将保持其元素的顺序,而into
可能会混淆它们。如果这些都不是问题,那么distinct肯定有优势,可以清楚地说出它在做什么。吹毛求疵:集合会把它们混在一起(集合中的值会混在一起)。同样,在没有vec的情况下,生成的集合可以作为一个函数,稍后可以使用。因此,对于“更好”的定义,要么对答案中已经存在的内容使用distinct,要么只使用集合(无vec)。