Menu
Coddy logo textTech

Dictionaries aktualisieren

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 14 von 56.

Sie schreiben in ein Dictionary auf die gleiche Weise, wie Sie daraus lesen: mit dem Subscript.

var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3                // fügt den Schlüssel hinzu
prices["apple"] = 2                // aktualisiert einen vorhandenen Schlüssel
prices["apple"] = nil              // entfernt den Schlüssel

Zwei benannte Methoden machen dasselbe expliziter:

prices.updateValue(5, package: "milk") // gibt den alten Wert zurück, oder nil
prices.removeValue(forKey: "bread")  // gibt den entfernten Wert zurück, oder nil

Die genannten Methoden geben den vorherigen Wert zurück, was nützlich ist, wenn Sie wissen müssen, ob der Schlüssel bereits existierte.

Das Default-Subscript-Pattern aus der vorherigen Lektion lässt sich perfekt mit Mutation verketten; so bauen Sie einen Zähler, ohne ein if zu schreiben:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]
challenge icon

Aufgabe

Mittel

Lies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von Operationen auf einem anfänglichen Dictionary. Jede Operation ist eine der folgenden:

  • set:<key>:<value> hinzufügen oder aktualisieren (der Wert ist eine Ganzzahl)
  • add:<key>:<value> den Wert zum bestehenden Wert addieren (verwende das Default-Subscript-Pattern)
  • del:<key> den Schlüssel entfernen

Nachdem jede Operation nacheinander auf ein anfänglich leeres [String: Int] angewendet wurde, gib die Schlüssel in alphabetischer Reihenfolge aus, einen pro Zeile, im Format <key>=<value>.

Für die Eingabe set:a:5,add:a:3,set:b:1,del:b,add:c:2 lautet die Ausgabe:

a=8
c=2

Spickzettel

Ändern Sie ein Dictionary mithilfe von Subscripts oder benannten Methoden:

prices["bread"] = 3      // hinzufügen
prices["apple"] = 2      // aktualisieren
prices["apple"] = nil    // entfernen

prices.updateValue(5, forKey: "milk") // gibt den alten Wert oder nil zurück
prices.removeValue(forKey: "bread")   // gibt den entfernten Wert oder nil zurück

Verwenden Sie das Default-Subscript-Muster, um ohne if zu mutieren:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]

Probier es selbst

let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]

// TODO: Jede Operation parsen und set/add/del anwenden; sortierte Schlüssel mit Werten ausgeben
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss