Iterar con ipairs()
Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 2 de 54.
Mientras que pairs() funciona con cualquier estructura de tabla, Lua proporciona una función especializada llamada ipairs() diseñada específicamente para tablas de estilo lista. Esta función itera a través de las tablas en orden secuencial, comenzando desde el índice 1 y continuando hasta que encuentra un valor nil.
La sintaxis de ipairs() es similar a pairs():
for index, value in ipairs(myList) do
-- usa index y value aquí
endAquí tienes un ejemplo con una lista de objetos de misión:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
endResultado:
1. Map
2. Compass
3. Torch
4. RopeLa diferencia clave con respecto a pairs() es que ipairs() se detiene inmediatamente cuando encuentra un valor nil, incluso si hay más elementos después de él.
Desafío
FácilEscribe una función listTasks que reciba una tabla tasks y devuelva una cadena formateada que enumere todas las tareas con sus números de posición.
Usa ipairs() para iterar a través de las tareas en orden secuencial y construir una cadena donde cada línea muestre el número de tarea seguido del nombre de la tarea en el formato number. task. Cada tarea debe estar en una línea separada.
Parámetros:
tasks(table): Una tabla de tipo lista que contiene nombres de tareas como cadenas
Devuelve: Una cadena con cada tarea numerada en una línea separada. Formato:
1. task1
2. task2
3. task3Hoja de referencia
ipairs() itera a través de tablas de estilo lista en orden secuencial, comenzando desde el índice 1 y deteniéndose en el primer valor nil:
for index, value in ipairs(myList) do
-- usa index y value aquí
endEjemplo:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
end
-- Salida:
-- 1. Map
-- 2. Compass
-- 3. Torch
-- 4. RopeDiferencia clave: A diferencia de pairs(), ipairs() se detiene inmediatamente cuando encuentra un valor nil, incluso si existen más elementos después de él.
Pruébalo tú mismo
function listTasks(tasks)
-- Escribe el código aquí
end
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altas