Menu
CoddyTech

Pattern per dizionari

Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 9 di 78.

Un pattern di dizionario elenca le chiavi e i pattern a cui devono corrispondere i loro valori. Corrisponde a un dizionario che contiene esattamente quelle chiavi, in qualsiasi ordine:

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

Il valore di "type" deve essere "move" e il valore di "dir", qualunque esso sia, viene memorizzato in d. Un dizionario con una chiave non elencata nel pattern non corrisponde. Aggiungi .. alla fine per consentire chiavi aggiuntive:

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

Una chiave scritta senza un valore controlla solo che la chiave esista: {"name", ..}: corrisponde a qualsiasi dizionario che abbia una chiave "name". Anche qui funzionano le guardie: {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

Sfida

Facile

Il programma legge un evento di gioco scritto come coppie key=value separate da virgole, ad esempio type=move,dir=left, e lo memorizza nel dizionario event (già scritto). Tutti i valori sono stringhe.

Usa un'istruzione match con pattern di dizionario, in questo ordine:

  • Esattamente le chiavi type ("move") e dir: stampa Moving e la direzione
  • Esattamente le chiavi type ("attack") e damage: stampa Taking , il danno e damage
  • type è "heal", con qualsiasi altra chiave: stampa Healing
  • Qualsiasi altro dizionario con una chiave type: stampa Unknown event: e il tipo
  • Qualsiasi altra cosa: stampa Invalid event

Per l'input type=attack,damage=30, l'output è:

Taking 30 damage

Un evento come type=move,dir=up,speed=2 ha una chiave aggiuntiva, quindi stampa Unknown event: move.

Provalo tu

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# Confronta event con i pattern del dizionario
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore GDScript online