此页面描述了集合管道模式中的一个操作。有关更多上下文,请阅读

交集

保留也存在于提供的集合中的元素

集合管道中没有集合交集的概念——它自然更适合嵌套运算符表达式——但有时它很有用。

与其使用显式交集函数,不如直接使用过滤器更简单

ruby…
[1,1,2,2,3,4].select{|i| [1,3].include? i}
# => [1, 1, 3]
clojure…
(filter #{1 3} [1 1 2 2 3 4])
;; => (1 1 3)

在处理这样的列表时,使用过滤器自然会导致结果包含来自源集合的重复项,并保留排序。如果您需要删除重复项,就像您对集合操作的期望一样,您需要在交集之后使用distinct

Ruby 提供了一个集合交集运算符。

ruby…
[1,1,2,2,3,4] & [1,3]
# => [1, 3]

正如预期的那样,它在集合操作的上下文中使用,交集运算符会删除重复项。但是,像任何中缀运算符一样,它在管道中使用起来很笨拙

Clojure 在其集合数据结构上提供了一个交集函数。要在管道中使用它,您需要先将序列转换为集合,并在完成后将其转换回序列(如果您需要它作为结果)。

clojure…
(->> [1 1 2 2 3 4]
     (set)
     (intersection #{1 3})
     (into []))
;; => [1 3]