アプリケーションを開発していると、2つの配列や集合の共通部分や相違を知りたくなることがあります。
Swift の Set には、便利な関数が良いされているので、紹介します。
Swift の Set には、便利な関数が良いされているので、紹介します。
Sponsor Link
Union/Intersect/Subtract
大きく分けて、3つの操作ができます。(引用元: Wikipedia)
- 和集合:いずれかの集合に含まれている要素 を持つ集合
- 交差:どちらの集合にも含まれている要素 を持つ集合
- 差集合:1つの集合に含まれている要素のうち他方の集合に含まれていない要素 を持つ集合
上記それぞれについて、自分自身(自集合)を変更するものと、新たに集合を作成するものが用意されています。
自集合を変更するもの
それぞれ、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 に用意されている集合操作関数は便利です
和・差・積(交差部分は、積とも呼ばれます)が用意されています。
このような操作関数は、自分で作ると意外とバグが入りやすいので、このように関数がすでに用意されていると便利ですよね。
説明は以上です。
Sponsor Link