Patrones de diccionarios
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 9 de 78.
Un patrón de diccionario enumera las claves y los patrones con los que deben coincidir sus valores. Coincide con un diccionario que tiene exactamente esas claves, en cualquier orden:
var event := {"type": "move", "dir": "left"}
match event:
{"type": "jump"}:
print("Jump!")
{"type": "move", "dir": var d}:
print("Moving ", d)Moving leftEl valor de "type" debe ser "move", y el valor de "dir", sea cual sea, se almacena en d. Un diccionario con una clave que el patrón no enumera no coincide. Añade .. al final para permitir claves adicionales:
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 clave escrita sin un valor solo comprueba que la clave existe: {"name", ..}: coincide con cualquier diccionario que tenga una clave "name". Las guardas también funcionan aquí: {"type": "attack", "damage": var dmg} when dmg > 50:.
Desafío
FácilEl programa lee un evento del juego escrito como pares key=value separados por comas, como type=move,dir=left, y lo almacena en el diccionario event (ya escrito). Todos los valores son cadenas.
Usa una instrucción match con patrones de diccionario, en este orden:
- Exactamente las claves
type("move") ydir: imprimeMovingy la dirección - Exactamente las claves
type("attack") ydamage: imprimeTaking, el daño ydamage typees"heal", con cualquier otra clave: imprimeHealing- Cualquier otro diccionario con una clave
type: imprimeUnknown event:y el tipo - Cualquier otra cosa: imprime
Invalid event
Para la entrada type=attack,damage=30, la salida es:
Taking 30 damageUn evento como type=move,dir=up,speed=2 tiene una clave adicional, así que imprime Unknown event: move.
Pruébalo tú mismo
extends Node
func _ready():
var event := {}
for pair in OS.read_string_from_stdin().split(","):
var kv := pair.split("=")
event[kv[0]] = kv[1]
# Compara event con patrones de diccionario
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online