pairs() vs. ipairs()
Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 3 de 54.
Ahora que has aprendido tanto pairs() como ipairs(), es importante entender cuándo usar cada uno. La elección depende totalmente de la estructura de tu tabla y de lo que estés intentando lograr.
Usa ipairs() cuando tengas una tabla de estilo lista con claves enteras secuenciales que comiencen desde 1. Procesa los elementos en orden y se detiene en el primer valor nil, lo que lo hace perfecto para arreglos donde el orden importa.
Usa pairs() cuando tu tabla tenga claves de cadena, tipos de clave mixtos o cuando necesites acceder a todas las entradas independientemente de los huecos. Itera a través de cada par clave-valor en la tabla sin ningún orden específico.
Considera esta tabla mixta:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}Si usas ipairs(), solo verás las tres cadenas de nivel. Si usas pairs(), verás las cinco entradas, incluyendo las claves de cadena.
Desafío
FácilEscribe una función countSequentialItems que recibe una tabla data y devuelve la cantidad de elementos con claves enteras secuenciales.
Usa ipairs() para contar cuántos elementos existen en la parte secuencial de la tabla (empezando desde el índice 1 hasta el primer nil). Esto te ayudará a entender la diferencia entre ipairs() y pairs() al trabajar con tablas mixtas.
Parámetros:
data(table): Una tabla mixta que contiene tanto claves enteras secuenciales como claves de cadena
Devuelve: El número de elementos secuenciales (number)
Hoja de referencia
Usa ipairs() para tablas de estilo lista con claves enteras secuenciales que comienzan desde 1. Procesa los elementos en orden y se detiene en el primer valor nil:
for i, value in ipairs(myList) do
-- procesa solo elementos secuenciales
endUsa pairs() para tablas con claves de cadena, tipos de clave mixtos, o cuando necesites acceder a todas las entradas independientemente de los huecos. Itera a través de cada par clave-valor sin un orden específico:
for key, value in pairs(myTable) do
-- procesa todos los pares clave-valor
endEjemplo con una tabla mixta:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}
-- ipairs() solo ve: "Level 1", "Level 2", "Level 3"
-- pairs() ve las cinco entradasPruébalo tú mismo
function countSequentialItems(data)
-- 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