このページでは、コレクションパイプラインパターン内の演算について説明します。詳細な文脈については、次の資料を参照してください。

交差点

提供されたコレクション内にも含まれる要素を保持します

集合の交差点という概念は、コレクションパイプラインの基本ではありません。本質的にネストされた演算式に適していますが、役立つ場合もあります。

明示的な交差関数は使用せずに、filterを使用する方が簡単な場合があります

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]

セット操作のコンテキストで使用されることが想定されているため、交差演算子では重複が削除されます。ただし、他の infix 演算子と同様に、パイプラインで使用するのは面倒です

Clojureは、そのセットデータ構造で定義された交差関数を提供します。パイプラインでシーケンスと一緒に使用するには、最初にシーケンスをセットに変換し、結果としてそれが必要な場合は使用終了時にシーケンスに戻す必要があります。

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