Menu
CoddyTech

Arrays de diccionarios

Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 20 de 78.

Cuando tienes muchos registros con los mismos campos, guárdalos en un arreglo de diccionarios: cada elemento es un registro.

var enemies := [
	{"type": "slime", "hp": 30},
	{"type": "orc", "hp": 80},
	{"type": "dragon", "hp": 500}
]

Un índice selecciona el registro y una clave selecciona el campo: enemies[1]["type"] es "orc". Un bucle for te da un diccionario en cada iteración:

for enemy in enemies:
	if enemy["hp"] >= 80:
		print(enemy["type"])
orc
dragon

Añade un registro con append(). Para cambiar un campo de cada registro, asigna el valor a través de la variable del bucle. Al igual que los arrays, los diccionarios se comparten, no se copian, así que enemy es el diccionario dentro del array y el cambio permanece allí:

enemies.append({"type": "bat", "hp": 10})
for enemy in enemies:
	enemy["hp"] += 5
print(enemies[3]) # { "type": "bat", "hp": 15 }

Para encontrar un registro por uno de sus campos, recorre la lista y compara. Empieza con null para poder saber cuándo no hubo ninguna coincidencia:

var found = null
for enemy in enemies:
	if enemy["type"] == "orc":
		found = enemy
if found == null:
	print("No orc")
else:
	print(found["hp"]) # 85

print() muestra toda la matriz con cada diccionario que contiene: [{ "type": "slime", "hp": 35 }, ...].

challenge icon

Desafío

Fácil

Construye una tabla de clasificación. El programa lee un número entero n y después n líneas, cada una con el nombre de un jugador y una puntuación separados por una coma, como Mia,95.

  1. Para cada línea, añade al arreglo players un diccionario con las claves "name" (el nombre) y "score" (la puntuación como int).
  2. Imprime el arreglo.
  3. Imprime Best: , el nombre del jugador con la puntuación más alta y la puntuación entre paréntesis. Si dos jugadores comparten la puntuación más alta, imprime al primero.

Para las entradas 3, Mia,95, Leo,80 y Ana,97, la salida es:

[{ "name": "Mia", "score": 95 }, { "name": "Leo", "score": 80 }, { "name": "Ana", "score": 97 }]
Best: Ana (97)

Pruébalo tú mismo

extends Node

func _ready():
	var n := int(OS.read_string_from_stdin())
	var players := []

	# Lee los n jugadores y guárdalos en el array

	# Imprime el array y el mejor jugador
	pass
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de GDScript online