Sets in Swift

Nach dem Array und dem Dictionary folgt nun der dritte collection type: Set. Es handelt sich dabei um eine nicht geordnete Sammlung von Elementen. Jedes Element kann dabei nur einmal vorkommen. Ein mit dem Schlüsselwort let deklariertes Set ist nicht veränderbar (immutable), ein mit var deklariertes Set ist hingegen veränderbar (mutable).

Ein leeres Set kann folgendermaßen angelegt werden:

var myCharacterSet: Set<Character> = Set()

oder kürzer mithilfe der Initialisierer-Syntax:

var myCharacterSet = Set<Character>()

Ein Set kann auch mit Elementen erstellt werden:

let programmingLanguages = Set([
    "Swift",
    "C++",
    "JavaScript",
    "Rust"
])

Wie auch bei anderen Datenstrukturen, kann die for-Schleife verwendet werden, um über ein Set zu iterieren:

for i in programmingLanguages {
    print(i)
}

Dies führt zu folgender Ausgabe:

Rust
JavaScript
Swift
C++

Um mehrere Werte auf einmal hinzuzufügen, kann ein ein Array genutzt werden:

var germanTowns: Set<String> = ["Munich", "Berlin", "Flensburg"]

Der Datentyp String muss nicht zwangsläufig angegeben werden, das Swift in der Lage ist, diesen zu ermitteln. Daher ist auch folgender Code möglich:

var germanTowns: Set = ["Munich", "Berlin", "Flensburg"]

Weitere Elemente können mit insert() hinzugefügt werden:

germanTowns.insert("Bielefeld")
germanTowns.insert("Bochum")

Über die count-Eigenschaft wird die Anzahl der im Set vorhandenen Elemente ermittelt:

print("Im Set sind \(germanTowns.count) Städte vorhanden.")

Und ob überhaupt ein Element vorhanden ist, lässt sich mit der isEmpty-Eigenschaft überprüfen:

if germanTowns.isEmpty {
    print("Es sind keine Städte vorhanden.")
} else {
    print(germanTowns)
}
// -> ["Flensburg", "Bochum", "Berlin", "Bielefeld", "Munich"]

Ob ein bestimmtes Element in einem Set enthalten ist, wird über die Methode contains() festgestellt:

if germanTowns.contains("Magdeburg") {
    print("Die Stadt 'Magdeburg' ist im Set enthalten.")
} else {
    print("Die Stadt 'Magdeburg' ist nicht im Set enthalten.")
}