Swift Language
セット
サーチ…
宣言セット
集合は一意の値の順不同の集合です。一意の値は同じ型でなければなりません。
var colors = Set<String>()
配列のリテラル構文を使用して、値を含むセットを宣言できます。
var favoriteColors: Set<String> = ["Red", "Blue", "Green", "Blue"]
// {"Blue", "Green", "Red"}
セット内の値の変更
var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}
insert(_:)
メソッドを使用して、新しい項目をセットに追加できます。
favoriteColors.insert("Orange")
//favoriteColors = {"Red", "Green", "Orange", "Blue"}
remove(_:)
メソッドを使用すると、セットから項目を削除できます。オプションで削除された値を返します。値がセットに含まれていない場合はnilを返します。
let removedColor = favoriteColors.remove("Red")
//favoriteColors = {"Green", "Orange", "Blue"}
// removedColor = Optional("Red")
let anotherRemovedColor = favoriteColors.remove("Black")
// anotherRemovedColor = nil
セットに値が含まれているかどうかを確認する
var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}
contains(_:)
メソッドを使用して、セットに値が含まれているかどうかを確認できます。セットにその値が含まれている場合はtrueを返します。
if favoriteColors.contains("Blue") {
print("Who doesn't like blue!")
}
// Prints "Who doesn't like blue!"
セットに対する操作の実行
両方のセットの共通の値:
両方のセットに共通するすべての値を含む新しいセットを作成するには、 intersect(_:)
メソッドを使用します。
let favoriteColors: Set = ["Red", "Blue", "Green"]
let newColors: Set = ["Purple", "Orange", "Green"]
let intersect = favoriteColors.intersect(newColors) // a AND b
// intersect = {"Green"}
各セットのすべての値:
union(_:)
メソッドを使用して、各セットのすべての一意の値を含む新しいセットを作成できます。
let union = favoriteColors.union(newColors) // a OR b
// union = {"Red", "Purple", "Green", "Orange", "Blue"}
値 "Green"が新しいセットに1回だけ現れることに注目してください。
両方のセットに存在しない値:
exclusiveOr(_:)
メソッドを使用して、どちらか一方のセットではなく両方のセットからのユニークな値を含む新しいセットを作成できます。
let exclusiveOr = favoriteColors.exclusiveOr(newColors) // a XOR b
// exclusiveOr = {"Red", "Purple", "Orange", "Blue"}
新しいセットに "Green"という値がどのように表示されるかは、両方のセットに含まれていたことに注意してください。
セットに含まれない値:
subtract(_:)
メソッドを使用すると、特定のセットにない値を含む新しいセットを作成できます。
let subtract = favoriteColors.subtract(newColors) // a - (a AND b)
// subtract = {"Blue", "Red"}
2番目のセットにも含まれていたので、新しいセットに「グリーン」という値が表示されないことに注目してください。
自分のタイプの値をセットに追加する
独自の型のSet
を定義するには、型をHashable
に準拠させる必要があります
struct Starship: Hashable {
let name: String
var hashValue: Int { return name.hashValue }
}
func ==(left:Starship, right: Starship) -> Bool {
return left.name == right.name
}
これで、 Starship(s)
Set
を作成できます。
let ships : Set<Starship> = [Starship(name:"Enterprise D"), Starship(name:"Voyager"), Starship(name:"Defiant") ]
CountedSet
Swift 3ではCountedSet
クラスが導入されました(これはNSCountedSet
Objective-CクラスのSwiftバージョンです)。
CountedSetは、名前で示唆されるように、値が何回存在するかを追跡します。
let countedSet = CountedSet()
countedSet.add(1)
countedSet.add(1)
countedSet.add(1)
countedSet.add(2)
countedSet.count(for: 1) // 3
countedSet.count(for: 2) // 1