Wörterbücher zusammenführen
Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 21 von 78.
merge() fügt jedes Schlüssel-Wert-Paar eines anderen Dictionaries zu dem Dictionary hinzu, auf dem du die Methode aufrufst. Schlüssel, die nur im anderen Dictionary vorkommen, werden am Ende hinzugefügt:
var settings := {"volume": 5, "difficulty": "normal"}
var saved := {"difficulty": "hard", "subtitles": true}
settings.merge(saved)
print(settings){ "volume": 5, "difficulty": "normal", "subtitles": true }"difficulty" ist in beiden Wörterbüchern enthalten, und merge() hat den Wert beibehalten, den settings bereits hatte: Standardmäßig werden vorhandene Schlüssel nicht überschrieben. Übergib true als zweites Argument, damit das andere Wörterbuch Vorrang hat:
var options := {"volume": 5, "difficulty": "normal"}
options.merge(saved, true)
print(options["difficulty"]) # hardmerge() ändert das Dictionary selbst und gibt nichts zurück, daher ist var result := a.merge(b) ein Fehler. Um beide Dictionaries unverändert zu lassen, verwende merged(). Es nimmt dieselben Argumente entgegen und gibt ein neues Dictionary zurück:
var defaults := {"volume": 5, "difficulty": "normal"}
var choice := {"difficulty": "hard"}
var final_settings := defaults.merged(choice, true)
print(final_settings) # { "volume": 5, "difficulty": "hard" }
print(defaults) # { "volume": 5, "difficulty": "normal" }Wenn ein Schlüssel in beiden Dictionaries vorkommt und du die Werte kombinieren möchtest, zum Beispiel zwei Beträge addieren, schreibe die Schleife selbst:
var bag := {"gold": 10, "gems": 1}
var loot := {"gold": 5, "keys": 2}
for key in loot:
bag[key] = bag.get(key, 0) + loot[key]
print(bag) # { "gold": 15, "gems": 1, "keys": 2 }Aufgabe
EinfachEin Spielupdate hat neue Einstellungen hinzugefügt. Die gespeicherten Einstellungen des Spielers werden aus einer Eingabezeile gelesen und als durch Kommas getrennte key=value-Paare geschrieben (die Zeile kann leer sein). Der vorgegebene Code speichert sie im Wörterbuch saved.
Ergänze die fehlenden Einstellungen: Füge zu saved jedes Paar aus defaults hinzu, dessen Schlüssel noch nicht darin enthalten ist, ohne die vom Spieler gewählten Werte zu ändern und ohne defaults zu ändern. Gib anschließend saved aus und in der nächsten Zeile defaults.
Für die Eingabe difficulty=hard,volume=8 lautet die Ausgabe:
{ "difficulty": "hard", "volume": "8", "subtitles": "off", "language": "en" }
{ "difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en" }Probier es selbst
extends Node
func _ready():
var defaults := {"difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en"}
var saved := {}
for pair in OS.read_string_from_stdin().split(",", false):
var parts := pair.split("=")
saved[parts[0]] = parts[1]
# Füge die fehlenden Standardwerte zu saved hinzu und gib dann beide Wörterbücher 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