此頁面描述集合管線模式中的運算。如需更多背景資訊,請閱讀

交集

保留也出現在提供集合中的元素

集合交集的概念並非集合管線的基本概念,它更自然地適用於巢狀運算子表達式,但有時很有用。

與其使用明確的交集函式,通常更直接的方式是使用篩選

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]