交集
保留也存在于提供的集合中的元素
集合管道中没有集合交集的概念——它自然更适合嵌套运算符表达式——但有时它很有用。
与其使用显式交集函数,不如直接使用过滤器更简单
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]