Menu
CoddyTech

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"]) # hard

merge() ä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 }
challenge icon

Aufgabe

Einfach

Ein 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
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