Bucles anidados con arrays 2D
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 14 de 78.
Para visitar cada celda de una matriz 2D, coloca un bucle dentro de otro. El bucle externo recorre las filas y el bucle interno recorre las celdas de la fila actual:
var grid := [[1, 2, 3], [4, 5, 6]]
var total := 0
for row in grid:
for cell in row:
total += cell
print(total) # 21Cuando necesites la posición de cada celda, recorre los índices. r es el índice de la fila, c el índice de la columna, y el bucle interno usa grid[r].size(), la longitud de la fila actual:
for r in range(grid.size()):
for c in range(grid[r].size()):
grid[r][c] *= 10
print(grid) # [[10, 20, 30], [40, 50, 60]]Asignar a cell en un bucle for cell in row no cambia la cuadrícula, porque cell contiene una copia del número. Cambia las celdas mediante sus índices, como se indicó arriba.
Los bucles anidados también crean una cuadrícula. Crea una nueva fila dentro del bucle externo, rellénala en el bucle interno y luego añádela:
var town := []
for r in range(3):
var row := []
for c in range(4):
row.append(".")
town.append(row)
town[1][2] = "P"
for row in town:
print("".join(row))....
..P.
....La fila debe crearse dentro del bucle externo. Un arreglo se comparte, no se copia, cuando lo agregas: si agregas la misma row tres veces, las tres filas son un solo arreglo, y town[1][2] = "P" coloca una P en cada fila.
Desafío
FácilDibuja el mapa de un pueblo. El programa lee cuatro números enteros, uno por línea: el número de filas, el número de columnas, la fila del jugador y la columna del jugador. La posición del jugador siempre está dentro del mapa.
- Crea
grid, una matriz 2D con esa cantidad de filas y columnas, donde cada celda sea".". Usa bucles anidados y crea una nueva matriz de fila para cada fila. - Establece la celda en la posición del jugador como
"P". - Imprime el mapa, una fila por línea, sin espacios entre las celdas.
Para las entradas 3, 4, 1 y 2, la salida es:
....
..P.
....Pruébalo tú mismo
extends Node
func _ready():
var rows := int(OS.read_string_from_stdin())
var cols := int(OS.read_string_from_stdin())
var player_row := int(OS.read_string_from_stdin())
var player_col := int(OS.read_string_from_stdin())
var grid := []
# Construye la cuadrícula con bucles anidados
# Coloca al jugador en el mapa
# Imprime el mapa
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