我有一个序列并试图删除重复项
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 书谈到了这个(可能是 Let Over Lambda),但是当在两个相似的函数之间做出选择时,更喜欢更具体的那个。 distinct
说明您需要不同的元素。 (into #{} xs)
可能会产生不同的值,但它也会让您的意图被误解。有人可能很容易认为您出于某种原因想要一套。 distinct
缩小了原因的范围。
关于clojure - 在 clojure 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102608/