Arrays irregulares
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 16 de 78.
Las filas de un array 2D no necesitan tener la misma longitud. Un array 2D cuyas filas tienen longitudes diferentes es un array irregular. Aquí, cada fila contiene las puntuaciones de un jugador, y los jugadores han jugado un número diferente de rondas:
var scores := [
[90, 85, 70],
[60],
[75, 80]
]
print(scores[0].size()) # 3
print(scores[1].size()) # 1En un arreglo irregular, scores[0].size() no es la longitud de cada fila. Recorre las columnas de la fila actual con scores[r].size():
for r in range(scores.size()):
var total := 0
for c in range(scores[r].size()):
total += scores[r][c]
print("Player ", r + 1, ": ", total)Player 1: 245
Player 2: 60
Player 3: 155Un bucle que siempre usa la longitud de la primera fila intenta leer más allá del final de las filas más cortas: scores[1][2] es un error, porque la fila 1 solo tiene el índice 0. for value in row siempre se ajusta a la fila que recorre.
Construyes un arreglo irregular como una cuadrícula, con una longitud diferente para cada fila. En este triángulo, la fila r tiene r + 1 celdas:
var triangle := []
for r in range(4):
var row := []
for c in range(r + 1):
row.append("*")
triangle.append(row)
for row in triangle:
print("".join(row))*
**
***
****Una fila incluso puede estar vacía: [[1, 2], [], [3]] es un arreglo irregular válido con tres filas.
Desafío
FácilEscribe una función llamada make_triangle con un parámetro int n. Devuelve un array irregular de n filas:
- La fila 1 tiene 1 celda, la fila 2 tiene 2 celdas, y así sucesivamente, hasta la fila
n, que tienenceldas. - Contando las filas y las columnas desde 1, cada celda contiene el número de su fila multiplicado por el número de su columna. La celda de la fila 3, columna 2 contiene
3 * 2 = 6.
Por ejemplo, make_triangle(3) devuelve:
[[1], [2, 4], [3, 6, 9]]Las pruebas llaman a make_triangle() y comprueban el array devuelto. No la llames ni imprimas nada.
Pruébalo tú mismo
func make_triangle(n: int):
# Escribe el código aquí
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