Menu
CoddyTech

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)) # 0

Um 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) # 150
challenge icon

Aufgabe

Einfach

Das 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: 39

Probier 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
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 & Ablaufsteuerung

Übe selbstständig: Online-GDScript-Compiler