Menu
CoddyTech

Dictionary-Muster

Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 9 von 78.

Ein Wörterbuchmuster listet Schlüssel und die Muster auf, denen ihre Werte entsprechen müssen. Es stimmt mit einem Wörterbuch überein, das genau diese Schlüssel enthält, und zwar in beliebiger Reihenfolge:

var event := {"type": "move", "dir": "left"}
match event:
	{"type": "jump"}:
		print("Jump!")
	{"type": "move", "dir": var d}:
		print("Moving ", d)
Moving left

Der Wert von "type" muss "move" sein, und der Wert von "dir" wird, unabhängig davon, welcher Wert es ist, in d gespeichert. Ein Dictionary mit einem Schlüssel, den das Muster nicht aufführt, stimmt nicht überein. Füge am Ende .. hinzu, um zusätzliche Schlüssel zuzulassen:

var hit := {"type": "attack", "damage": 30, "crit": true}
match hit:
	{"type": "attack", "damage": _}:
		print("Exactly two keys")
	{"type": "attack", "damage": var dmg, ..}:
		print("Hit for ", dmg)
Hit for 30

Ein Schlüssel, der ohne Wert geschrieben wird, prüft nur, ob der Schlüssel vorhanden ist: {"name", ..}: passt zu jedem Dictionary, das einen Schlüssel "name" hat. Auch hier funktionieren Wächter: {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

Aufgabe

Einfach

Das Programm liest ein Spielereignis, das als durch Kommas getrennte key=value-Paare geschrieben ist, z. B. type=move,dir=left, und speichert es im Wörterbuch event (bereits geschrieben). Alle Werte sind Zeichenketten.

Verwende eine match-Anweisung mit Wörterbuchmustern in dieser Reihenfolge:

  • Genau die Schlüssel type ("move") und dir: Gib Moving und die Richtung aus
  • Genau die Schlüssel type ("attack") und damage: Gib Taking , den Schaden und damage aus
  • type ist "heal", mit beliebigen anderen Schlüsseln: Gib Healing aus
  • Jedes andere Wörterbuch mit einem Schlüssel type: Gib Unknown event: und den Typ aus
  • Alles andere: Gib Invalid event aus

Für die Eingabe type=attack,damage=30 lautet die Ausgabe:

Taking 30 damage

Ein Ereignis wie type=move,dir=up,speed=2 hat einen zusätzlichen Schlüssel und gibt daher Unknown event: move aus.

Probier es selbst

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# event mit Dictionary-Mustern abgleichen
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