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 leftIl 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 30Una 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:.
Sfida
FacileIl 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") edir: stampaMovinge la direzione - Esattamente le chiavi
type("attack") edamage: stampaTaking, il danno edamage typeè"heal", con qualsiasi altra chiave: stampaHealing- Qualsiasi altro dizionario con una chiave
type: stampaUnknown event:e il tipo - Qualsiasi altra cosa: stampa
Invalid event
Per l'input type=attack,damage=30, l'output è:
Taking 30 damageUn 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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Stringhe in dettaglio
Metodi delle stringheRicerca nelle stringheSostituzione e trimDividere e unireRipasso - verifica del nome utente4Dizionari - Parte 2
Dizionari annidatiArray di dizionariUnire dizionariCopiare dizionariRiepilogo - Contatore di frequenza7Enumerazioni
Che cos'è un'enumerazione?Definire un'enumerazioneValori dell'enumerazioneEnumerazioni in MatchRiepilogo - Semaforo10Funzioni avanzate
Restituire più valoriFunzioni lambda - Parte 1Funzioni lambda - Parte 2Ripasso - Ordinamento con lambdaFunzioni ricorsive - Parte 1Funzioni ricorsive - Parte 2Ripasso - Somma di un array annidato13Sistema di gestione dell'inventario
Panoramica del progettoAggiungere un articolo2Decisioni avanzate
Match con variabiliGuardie di matchPattern per arrayPattern per dizionariVerifiche di appartenenzaRiepilogo - Parser di comandi5Applicazione Rubrica
Visualizzare il menuAggiungere un contatto8Gestione dei registri degli studenti
Panoramica del progettoAggiungi studente11Funzioni di ordine superiore
Il metodo mapIl metodo filterIl metodo reduceany e allRipasso - Validatore di emailRipasso - Elaboratore di numeri3Array multidimensionali
Fondamenti degli array 2DAccedere agli elementi di un array 2DCicli annidati con array 2DRipasso - Array 2DArray frastagliatiSchemi comuni con gli array 2DRipasso - Tabellone di gioco6Insiemi con i dizionari
Che cos'è un insieme?Il dizionario come insiemeAggiungere e rimuovereUnione e intersezioneDifferenza tra insiemiRiepilogo - Rimuovere i duplicati9Aggregazione avanzata dei dati
Somma dei valoriTrovare minimo e massimoOrdinamento personalizzatoRiepilogo - Ordinatore di dizionariEsercitati da solo: Compilatore GDScript online