所以,如果我们想要一个独特项的集合,可以使用“set”。
如果我们已经有了一个想要去重的项目集合,可以将它们传递给set函数,或者我们也可以使用distinct或dedupe函数。
使用每个函数的情况是什么(利弊)?
谢谢。
如果我们已经有了一个想要去重的项目集合,可以将它们传递给set函数,或者我们也可以使用distinct或dedupe函数。
使用每个函数的情况是什么(利弊)?
谢谢。
set
会立即创建一个新的集合。distinct
会创建一个懒惰序列,其中重复的输入集合元素已被移除。相对于 set
,它具有一个优势,如果你处理大型集合,并且惰性地查询输入集合(例如使用 take
),惰性计算可能会节省时间。dedupe
从输入集合中移除连续重复的元素,因此它与 set
和 distinct
具有不同的语义。例如,当应用于 (1 1 1 2 3 3 1 1 2 2 2 3 3)
时,它将返回 (1 2 3 1 2 3)
。set
和懒惰序列具有不同的可用 API(例如,disj
、get
对比 nth
),并且具有不同的性能特征(例如,set 的 O(log32 n) 查找和懒惰序列的 O(n))。根据你想要使用它们的结果的方式来选择。
此外,在没有参数调用时,distinct
和 dedupe
返回一个 transducer。
set
和distinct
可能会以不同的顺序呈现集合。在我的系统上,(= ((comp seq set) (range 91)) (distinct (range 91))) => false
。 - Thumbnail