SWIFT構文#6の整理


ソース:アップル公式SWIFTレポート

Set


Setは、繰り返しが許されず、順序がない値のセットです.Setデータ型は、値を格納する際にハッシュ値を使用する.したがって、ユーザが作成したカスタムデータ型をSetに保存する場合は、SWIFT標準ライブラリのハッシュプロトコルを拡張して使用する必要があります.また,これはSetだけでなくDictionary資料型のKeyに相当する.
Setの使い方はほぼArrayに似ています.しかし,Insert法では,Setが無秩序集合であるため,Indexは存在しない.
var letters = Set<Character>()
letters.insert("a")
letters = []
letters += ["b"] // Error!
要素を削除するremoveメソッドはArrayとは少し異なります.次の例です.
let removedGenre = favoriteGenres.remove("Rock") // removedGenre -> String?
Setでremoveはオプション値を返します.これは、削除しようとした値がSetに存在しない可能性があるためです.したがって、removeを使用する場合は、必ず選択するかどうかを確認します.
特定の値があるかどうかはcontains(:)メソッドで決定できます.
if favoriteGenres.contains("Funk") {
    print("I get up on the good foot.")
} 
コレクション内の値をソートする必要がある場合は、ソート(by:)メソッドを使用します.
for genre in favoriteGenres.sorted(by: <) {
    print(genre)
}

Set演算の実行


写真ソース:アップルSWIFT公式原稿
上図はSWIFTが提供するSet演算の種類です.交差、和セット、差セットなどの演算を提供します.
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbes: Set = [2, 3, 5, 7]

oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbes).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbes).sorted()
// [1, 2, 9]
また,以下のように部分集合の有無を確認することもできる.
let houseAnimals: Set = ["Dog", "Cat"]
let farmAnimals: Set = ["Cow", "Chicken", "Sheep", "Dog", "Cat"]
let cityAnimals: Set = ["Pigeon", "Rat"]
houseAnimals.isSubset(of: farmAnimals) // true
farmAnimals.isSuperset(of: houseAnimals) // true
farmAnimals.isDisjoint(with: cityAnimals) // true