Verschachtelte Wörterbücher
Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 19 von 78.
Ein Wörterbuchwert kann ein anderes Wörterbuch sein. Ein verschachteltes Wörterbuch gruppiert zusammengehörige Daten: Die äußeren Schlüssel bezeichnen die Datensätze, und jedes innere Wörterbuch enthält die Felder eines Datensatzes.
var heroes := {
"Mia": {"hp": 100, "class": "mage"},
"Leo": {"hp": 80, "class": "knight"}
}Verkette die Schlüssel, um einen inneren Wert zu erreichen. heroes["Mia"] ist Mias inneres Dictionary, und ["hp"] liest daraus. Zuweisungen funktionieren genauso:
print(heroes["Mia"]["hp"]) # 100
heroes["Leo"]["hp"] -= 30 # Leo erleidet Schaden
heroes["Mia"]["mana"] = 50 # fügt nur Mia ein Schlüssel-Wert-Paar hinzu
print(heroes["Mia"]){ "hp": 100, "class": "mage", "mana": 50 }Um einen ganzen Datensatz hinzuzufügen, weise einem neuen äußeren Schlüssel ein Dictionary zu: heroes["Ana"] = {"hp": 90, "class": "archer"}.
Ein fehlender Schlüssel auf einer der beiden Ebenen ist ein Fehler. Wenn ein Datensatz fehlen kann, rufe get() mit einem leeren Wörterbuch als Standardwert auf und anschließend erneut get() auf dem Ergebnis auf:
print(heroes.get("Zed", {}).get("hp", 0)) # 0Um jeden inneren Wert zu erreichen, durchlaufe die äußeren Schlüssel und lies aus jedem inneren Dictionary:
var total_hp := 0
for hero in heroes:
total_hp += heroes[hero]["hp"]
print(total_hp) # 150Aufgabe
EinfachDas verschachtelte Wörterbuch inventory ist gegeben: Jeder äußere Schlüssel ist eine Abteilung, jeder innere Schlüssel ein Artikel und jeder innere Wert die Menge auf Lager.
Das Programm liest eine Zeile: Abfragen im Format department/item, durch Kommas getrennt. Gib für jede Abfrage der Reihe nach eine Zeile aus:
- die Abfrage, einen Doppelpunkt, ein Leerzeichen und die Menge, wenn diese Abteilung den Artikel enthält
- die Abfrage gefolgt von
: missing, wenn die Abteilung oder der Artikel nicht existiert
Gib dann Total inventory: gefolgt von der Summe aller Mengen in allen Abteilungen aus.
Für die Eingabe fruits/apples,meat/beef,fruits/kiwis,candy/gum lautet die Ausgabe:
fruits/apples: 12
meat/beef: 7
fruits/kiwis: missing
candy/gum: missing
Total inventory: 39Probier es selbst
extends Node
func _ready():
var inventory := {
"fruits": {"apples": 12, "bananas": 4},
"meat": {"beef": 7, "chicken": 5},
"dairy": {"milk": 9, "cheese": 2}
}
var lookups := OS.read_string_from_stdin().split(",")
# Gib für jede Suchanfrage die Menge aus oder missing, falls sie nicht gefunden wird
# Gib die Summe aller Mengen aus
pass
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablaufsteuerung
1Strings im Detail
String-MethodenIn Strings suchenErsetzen und TrimmenAufteilen und ZusammenfügenRückblick – Benutzernamen prüfen4Wörterbücher Teil 2
Verschachtelte WörterbücherArrays aus WörterbüchernWörterbücher zusammenführenWörterbücher kopierenWiederholung – Häufigkeitszähler10Fortgeschrittene Funktionen
Mehrere Werte zurückgebenLambda-Funktionen Teil 1Lambda-Funktionen Teil 2Wiederholung – Sortieren mit LambdaRekursive Funktionen Teil 1Rekursive Funktionen Teil 2Wiederholung – Verschachteltes Array summieren13Inventarverwaltungssystem
ProjektübersichtArtikel hinzufügen2Fortgeschrittene Entscheidungsfindung
Match mit VariablenMatch-GuardsArray-MusterDictionary-MusterMitgliedschaftsprüfungenRückblick – Befehlsparser5Kontaktbuch-Anwendung
Menü anzeigenKontakt hinzufügen8Schülerdatenverwaltung
ProjektübersichtSchüler hinzufügen3Mehrdimensionale Arrays
Grundlagen zu 2D-ArraysAuf Elemente in 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysWiederholung – 2D-ArraysGezackte ArraysGängige Muster für 2D-ArraysWiederholung – Spielbrett6Mengen mit Dictionaries
Was ist eine Menge?Dictionary als MengeHinzufügen und EntfernenVereinigung und SchnittmengeMengendifferenzWiederholung – Duplikate entfernen9Fortgeschrittene Datenaggregation
Werte summierenMinimum und Maximum findenBenutzerdefiniertes SortierenRückblick – Wörterbuch-Sortierer12Einfache Fehlerbehandlung
Was ist Fehlerbehandlung?Eingaben validierenGuard ClausesFehlercodes zurückgebenRückblick – Sichere DivisionÜbe selbstständig: Online-GDScript-Compiler