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]
  1. 两种情况都带来结果,那么使用哪种更好?
  2. 它们之间有什么区别?

最佳答案

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

  1. distinct 是懒惰的
  2. distinct 没有参数是一个转换器
  3. distinct 保持秩序

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

关于clojure - 在 clojure 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102608/

相关文章:

Clojure:Hiccup 表单处理程序

macos - Clojure 仅依赖于 Java 1.5?

sqlite - 在 Clojure 中通过 clojure.java.jdbc 使用外键约束

clojure - 为什么 ISeq 的 "more"不命名为 "rest"?

javascript - 什么是 clojure.core 相当于 lodash _.pluck

string - Clojure 的 "apply"字符串函数

for-loop - 如何从 Clojure 中的嵌套 for 循环生成一个惰性序列

Clojure 规范和 "Couldn' t 在 100 次尝试后满足这样的谓词......”

clojure - 更改 lein repl 提示文本

list - 在 clojure 中 - 如何一一使用列表元素?