Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
セット.union() / intersection() / subtracting()
Swiftの『Set』は、和集合・積集合・差集合などの集合演算をサポートしています。数学的な集合操作を直感的に記述できます。
メソッド一覧
| メソッド | 概要 |
|---|---|
| union(_:) | 2つのセットの和集合(両方に含まれる要素の集合)を返します。 |
| intersection(_:) | 2つのセットの積集合(共通する要素の集合)を返します。 |
| subtracting(_:) | 2つのセットの差集合(自分にあって相手にない要素の集合)を返します。 |
| symmetricDifference(_:) | 一方だけに含まれる要素の集合(排他的論理和)を返します。 |
| isSubset(of:) | 自分が指定セットの部分集合かどうかを返します。 |
| isSuperset(of:) | 自分が指定セットの上位集合かどうかを返します。 |
| isDisjoint(with:) | 共通する要素が存在しないかどうかを返します。 |
サンプルコード
let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]
// 和集合: A または B に含まれる要素
let unionSet = setA.union(setB)
print("和集合: \(unionSet.sorted())")
// 積集合: A と B 両方に含まれる要素
let intersectionSet = setA.intersection(setB)
print("積集合: \(intersectionSet.sorted())")
// 差集合: A にあって B にない要素
let subtractingSet = setA.subtracting(setB)
print("差集合(A - B): \(subtractingSet.sorted())")
// 対称差: どちらか一方にしかない要素
let symDiffSet = setA.symmetricDifference(setB)
print("対称差: \(symDiffSet.sorted())")
// 部分集合・上位集合の確認
let small: Set<Int> = [1, 2, 3]
print("small は setA の部分集合: \(small.isSubset(of: setA))")
print("setA は small の上位集合: \(setA.isSuperset(of: small))")
// 互いに素(共通要素なし)
let setC: Set<Int> = [8, 9, 10]
print("setA と setC は互いに素: \(setA.isDisjoint(with: setC))")
// 破壊的メソッド(自分自身を変更)
var mutableSet: Set<Int> = [1, 2, 3]
mutableSet.formUnion([3, 4, 5])
print("formUnion 後: \(mutableSet.sorted())")
概要
集合演算メソッドには新しいセットを返す非破壊版(『union』『intersection』等)と、自分自身を変更する破壊版(『formUnion』『formIntersection』等)の2種類があります。
集合演算はデータの重複除外や共通要素の抽出に役立ちます。たとえばユーザーAとユーザーBが持つ商品の共通セットを求めるといった用途に使えます。集合演算は元のセットを変更しないため、結果を使うには戻り値を受け取る必要があります(破壊版を使う場合を除く)。
セットの基本操作についてはセット.insert() / remove() / contains()を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。