Wörterbücher kopieren
Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 22 von 78.
Das Zuweisen eines Dictionaries an eine andere Variable kopiert es nicht. Beide Variablen verweisen auf dasselbe Dictionary, daher zeigt sich eine Änderung über die eine auch bei der anderen:
var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10duplicate() erstellt ein neues Wörterbuch mit denselben Schlüssel-Wert-Paaren. Änderungen an der Kopie lassen das Original unverändert:
var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30duplicate() erstellt eine flache Kopie: Die Kopie hat ihre eigenen Schlüssel-Wert-Paare, aber ein Wert, der ein Array oder ein Dictionary ist, wird weiterhin von beiden gemeinsam verwendet:
var hero := {"stats": {"hp": 100}, "items": ["sword"]}
var clone := hero.duplicate()
clone["stats"]["hp"] = 1
clone["items"].append("shield")
print(hero){ "stats": { "hp": 1 }, "items": ["sword", "shield"] }Übergib true für eine tiefe Kopie: duplicate(true) kopiert auch jedes darin enthaltene Array und Dictionary, sodass die beiden nichts gemeinsam haben:
var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1Eine flache Kopie genügt, wenn jeder Wert eine Zahl, eine Zeichenfolge oder ein boolescher Wert ist. Sobald ein Wert ein Array oder ein Dictionary ist, verwende duplicate(true). Bei Arrays funktioniert es genauso: grid.duplicate(true) kopiert ein 2D-Array zusammen mit seinen Zeilen.
Aufgabe
EinfachErzeuge eine Welle von Gegnern aus einer Vorlage. Das Dictionary template ist vorgegeben. Das Programm liest zwei ganze Zahlen, eine pro Zeile: wie viele Gegner erzeugt werden sollen (n) und einen hp-Bonus.
Für jede Gegnernummer i von 1 bis n:
- Erstelle eine Kopie von
template, die nichts mit ihr teilt. - Füge den Schlüssel
"id"mit dem Wertihinzu. - Addiere
bonus * izu"hp"innerhalb von"stats". - Wenn es der letzte Gegner ist, füge
"crown"zu seiner"loot"-Liste hinzu. - Gib den Gegner aus.
Gib schließlich Template: gefolgt von der Vorlage aus, die unverändert bleiben muss. Für die Eingaben 2 und 10 lautet die Ausgabe:
{ "type": "slime", "stats": { "hp": 40, "speed": 2 }, "loot": ["gel"], "id": 1 }
{ "type": "slime", "stats": { "hp": 50, "speed": 2 }, "loot": ["gel", "crown"], "id": 2 }
Template: { "type": "slime", "stats": { "hp": 30, "speed": 2 }, "loot": ["gel"] }Probier es selbst
extends Node
func _ready():
var template := {"type": "slime", "stats": {"hp": 30, "speed": 2}, "loot": ["gel"]}
var n := int(OS.read_string_from_stdin())
var bonus := int(OS.read_string_from_stdin())
# Erzeuge die n Gegner und gib sie aus
# Gib die Vorlage 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