Dictionaries in Swift

Was sind Dictionaries? Wie Arrays und Sets gehören sie zu den Collections (oder: Collection Types). Sie werden dazu verwendet, um Objekte nach dem Key-Value-Prinzip abzulegen. Dabei kann der Schlüssel nur einmal vorkommen.

Ein Dictionary lässt sich sehr einfach erstellen:

var capitolCities: Dictionary = ["Bayern" : "München", "Hessen" : "Wiesbaden"]

Das Bundesland ist der Schlüssel, die Landeshauptstadt der dazugehörige Wert. Zusammen bilden sie jeweils ein Schlüssel-Wert-Paar.

In Swift ist es nicht erforderlich, den Datentyp anzugeben. Denn Swift ist in der Lage, selbigen zu ermitteln (type inference); möglich wäre also auch:

var capitolCities = ["Bayern" : "München", "Hessen" : "Wiesbaden"]

Es existiert noch folgende alternative Möglichkeit der Deklaration, bei der die Datentypen für die Schlüssel und die Werte explizit angegeben werden:

var moreCapitolCities: Dictionary<String, String> = ["Schleswig-Holstein": "Kiel", "Thüringen": "Erfurt"]

Dictionaries können konstant (let) oder variabel (var) erzeugt werden. Sie sind dann dementsprechend un­ver­än­der­bar (immutable) oder veränderbar (mutable).

Der Wert für den Schlüssel „Hessen“ könnte folgendermaßen einer Variablen zugewiesen werden:

let hessen = capitolCities["Hessen"]

Wenn dieser Code ausgeführt wird, erscheint aber eine Warnmeldung. Das hängt damit zusammen, dass Dictionaries ein Optional zurückgeben. Deswegen muss entweder das Auspacken dieses Optionals mithilfe eines Ausrufezeichens (!) erzwungen werden (implicitly unwrapped) oder es wird if let verwendet.

let hessen = capitolCities["Hessen"]!
print("Die Hauptstadt von Hessen ist \(hessen).")

if let bayern = capitolCities["Bayern"] {
    print("Die Hauptstadt von Bayern ist \(bayern).")
}

Die Key-Value-Paare eines Dictionarys können wie folgt durchlaufen und angezeigt werden:

for key in capitolCities.keys {
    print("Key: \(key) - Value: \(capitolCities[key]!)")
}

In der Konsole erscheint dann folgende Ausgabe:

Key: Hessen - Value: Wiesbaden
Key: Bayern - Value: München

Die Schlüssel und Werte des Dictionary können folgendermaßen verändert werden:

// Schlüssel und Wert hinzufügen:
capitolCities["Thüringen"] = "Erfurt"

// Schlüssel und Wert löschen:
capitolCities["Hessen"] = nil

Sollte man sich in Bayern für Augsburg als Landeshauptstadt entscheiden, könnte das Dictionary angepasst werden:

// Wert ändern
capitolCities["Bayern"] = "Augsburg"

Darüber hinaus existieren für das Verändern eines Dictionarys verschiedene Methoden:

capitolCities.updateValue("Nürnberg", forKey: "Bayern")
capitolCities.removeValue(forKey: "Thüringen")
capitolCities.removeAll(keepingCapacity: true)

Damit wird ein Wert aktualisiert, ein Wert entfernt und alle Schlüssel-Wert-Paare entfernt.

Weitere Datenstrukturen