Copiar diccionarios
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 22 de 78.
Asignar un diccionario a otra variable no lo copia. Ambas variables hacen referencia al mismo diccionario, así que un cambio realizado a través de una se refleja en la otra:
var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10duplicate() crea un nuevo diccionario con los mismos pares. Cambiar la copia no afecta al original:
var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30duplicate() hace una copia superficial: la copia tiene sus propios pares, pero un valor que sea un array o un diccionario sigue siendo compartido entre ambos:
var hero := {"stats": {"hp": 100}, "items": ["sword"]}
var clone := hero.duplicate()
clone["stats"]["hp"] = 1
clone["items"].append("shield")
print(hero){ "stats": { "hp": 1 }, "items": ["sword", "shield"] }Pasa true para hacer una copia profunda: duplicate(true) también copia todos los arrays y diccionarios que contiene, así que no comparten nada:
var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1Una copia superficial es suficiente cuando cada valor es un número, una cadena o un booleano. En cuanto un valor es un arreglo o un diccionario, usa duplicate(true). Los arreglos funcionan de la misma manera: grid.duplicate(true) copia un arreglo bidimensional junto con sus filas.
Desafío
FácilGenera una oleada de enemigos a partir de una plantilla. Se proporciona el diccionario template. El programa lee dos números enteros, uno por línea: cuántos enemigos generar (n) y una bonificación de hp.
Para cada número de enemigo i desde 1 hasta n:
- Haz una copia de
templateque no comparta nada con ella. - Añade la clave
"id"con el valori. - Añade
bonus * ia"hp"dentro de"stats". - Si es el último enemigo, añade
"crown"a su"loot". - Imprime el enemigo.
Por último, imprime Template: seguido de la plantilla, que debe permanecer sin cambios. Para las entradas 2 y 10, la salida es:
{ "type": "slime", "stats": { "hp": 40, "speed": 2 }, "loot": ["gel"], "id": 1 }
{ "type": "slime", "stats": { "hp": 50, "speed": 2 }, "loot": ["gel", "crown"], "id": 2 }
Template: { "type": "slime", "stats": { "hp": 30, "speed": 2 }, "loot": ["gel"] }Pruébalo tú mismo
extends Node
func _ready():
var template := {"type": "slime", "stats": {"hp": 30, "speed": 2}, "loot": ["gel"]}
var n := int(OS.read_string_from_stdin())
var bonus := int(OS.read_string_from_stdin())
# Genera e imprime los n enemigos
# Imprime la plantilla
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