交集
保留也出現在提供集合中的元素
集合交集的概念並非集合管線的基本概念,它更自然地適用於巢狀運算子表達式,但有時很有用。
與其使用明確的交集函式,通常更直接的方式是使用篩選
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]