[Swift] Set の便利な関数の説明

Swift

アプリケーションを開発していると、2つの配列や集合の共通部分や相違を知りたくなることがあります。
Swift の Set には、便利な関数が良いされているので、紹介します。

Union/Intersect/Subtract

大きく分けて、3つの操作ができます。(引用元: Wikipedia)

  • 和集合:いずれかの集合に含まれている要素 を持つ集合
    Union
  • 交差:どちらの集合にも含まれている要素 を持つ集合
    intersect
  • 差集合:1つの集合に含まれている要素のうち他方の集合に含まれていない要素 を持つ集合

    sub

上記それぞれについて、自分自身(自集合)を変更するものと、新たに集合を作成するものが用意されています。

自集合を変更するもの

それぞれ、Playgroundでのコードを示します。

いずれも、2つの集合を使いますので、どちらの集合が変更されるのかに気をつける必要があります。

なお、変数の型は、Set ですので、実行結果の表示順番に意味はありません。

また、自分自身を変更するために、変更される側の Set は、var で定義される必要があります。

formUnion

set1 を set1 と set2 の和集合にします。

formUnion

func formUnion() {
    var set1:Set = [1,2,3]
    let set2:Set = [2,3,4]
    set1.formUnion(set2)
    print(set1)
}
formUnion()

// 実行結果:[4, 1, 3, 2]   // print(set1)

formIntersection

set1 を set1 と set2 の交差集合にします。

formIntersection

func formIntersection() {
    var set1:Set = [1,2,3]
    let set2:Set = [2,3,4]
    set1.formIntersection(set2)
    print(set1)
}
formIntersection()

// 実行結果:[3, 2]   // print(set1)

subtract

set1 を set1 から set2 を引いた差集合にしています。

formIntersection

func subtract() {
    var set1:Set = [1,2,3]
    var set2:Set = [2,3,4]

    set1.subtract(set2)
    print(set1)
    print(set2)
}
subtract()
// 実行結果:[1]         // print(set1)
// 実行結果:[4, 2, 3]   // print(set2)

新しい集合を作るもの

既存の set を変更せずに新しい集合を作る関数も用意されています。

union

set1 と set2 の和集合を作成しています。

union

func union() {
    let set1:Set = [1,2,3]
    let set2:Set = [2,3,4]
    let union12 = set1.union(set2)
    print(union12)

}
union()
// 実行結果:[1, 3, 2, 4]  // print(union12)

intersection

set1 と set2 の交差集合を作成しています。

intersection

func intersection() {
    let set1:Set = [1,2,3]
    let set2:Set = [2,3,4]
    let int12 = set1.intersection(set2)
    print(int12)
}
intersection()
// 実行結果:[3, 2]   // print(int12)

subtracting

subtracting

func subtracting() {
    let set1:Set = [1,2,3]
    let set2:Set = [2,3,4]

    let sub12 = set1.subtracting(set2)
    let sub21 = set2.subtracting(set1)
    print(sub12)
    print(sub21)
}
subtracting()
// 実行結果:[1] // print(sub12)
// 実行結果:[4] // print(sub21)

まとめ:Set に用意されている集合操作関数は便利です

和・差・積(交差部分は、積とも呼ばれます)が用意されています。

このような操作関数は、自分で作ると意外とバグが入りやすいので、このように関数がすでに用意されていると便利ですよね。

説明は以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です