Combinar diccionarios
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 21 de 78.
merge() añade cada par del otro diccionario al diccionario sobre el que lo llamas. Las claves que solo están en el otro diccionario se añaden al final:
var settings := {"volume": 5, "difficulty": "normal"}
var saved := {"difficulty": "hard", "subtitles": true}
settings.merge(saved)
print(settings){ "volume": 5, "difficulty": "normal", "subtitles": true }"difficulty" está en ambos diccionarios, y merge() conservó el valor que settings ya tenía: de forma predeterminada, las claves existentes no se sobrescriben. Pasa true como segundo argumento para que prevalezca el otro diccionario:
var options := {"volume": 5, "difficulty": "normal"}
options.merge(saved, true)
print(options["difficulty"]) # hardmerge() modifica el propio diccionario y no devuelve nada, así que var result := a.merge(b) es un error. Para mantener ambos diccionarios tal como están, usa merged(). Acepta los mismos argumentos y devuelve un diccionario nuevo:
var defaults := {"volume": 5, "difficulty": "normal"}
var choice := {"difficulty": "hard"}
var final_settings := defaults.merged(choice, true)
print(final_settings) # { "volume": 5, "difficulty": "hard" }
print(defaults) # { "volume": 5, "difficulty": "normal" }Cuando una clave está en ambos diccionarios y quieres combinar los valores, por ejemplo, sumar dos cantidades, escribe el bucle tú mismo:
var bag := {"gold": 10, "gems": 1}
var loot := {"gold": 5, "keys": 2}
for key in loot:
bag[key] = bag.get(key, 0) + loot[key]
print(bag) # { "gold": 15, "gems": 1, "keys": 2 }Desafío
FácilUna actualización del juego añadió nuevos ajustes. Los ajustes guardados del jugador se leen de una línea de entrada, escritos como pares key=value separados por comas (la línea puede estar vacía). El código proporcionado los almacena en el diccionario saved.
Completa los ajustes que faltan en el archivo guardado: añade a saved cada par de defaults cuya clave todavía no esté en él, sin cambiar los valores que eligió el jugador y sin cambiar defaults. Después, imprime saved e imprime defaults en la línea siguiente.
Para la entrada difficulty=hard,volume=8, la salida es:
{ "difficulty": "hard", "volume": "8", "subtitles": "off", "language": "en" }
{ "difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en" }Pruébalo tú mismo
extends Node
func _ready():
var defaults := {"difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en"}
var saved := {}
for pair in OS.read_string_from_stdin().split(",", false):
var parts := pair.split("=")
saved[parts[0]] = parts[1]
# Agrega los valores predeterminados que faltan a saved y luego imprime ambos diccionarios
pass
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