Las tablas son la estructura de datos más importante en Lua. Son como cajas mágicas que pueden guardar múltiples valores: listas de enemigos, inventarios, estadísticas de jugadores... ¡Todo cabe en una tabla!
Una tabla es una colección de valores entre llaves {}.
-- Tabla con números
local numeros = {1, 2, 3, 4, 5}
-- Tabla con textos
local enemigos = {"Goblin", "Orco", "Dragón"}
-- Tabla mixta
local inventario = {"Espada", 50, "Poción", 100}
Usa el índice (posición) para acceder. En Lua, los índices comienzan en 1, no en 0.
local enemigos = {"Goblin", "Orco", "Dragón"}
print(enemigos) -- Goblin
print(enemigos) -- Orco
print(enemigos) -- Dragón
-- Modificar un elemento
enemigos = "Goblin Fuerte"
print(enemigos) -- Goblin Fuerte
¡Importante! En Lua, los índices comienzan en 1. En JavaScript comienzan en 0. ¡No olvides esto!
Puedes agregar elementos a una tabla dinámicamente.
local inventario = {"Espada", "Escudo"}
-- Agregar un elemento al final
table.insert(inventario, "Poción")
print(inventario) -- Poción
-- Agregar en una posición específica
table.insert(inventario, 2, "Anillo")
-- Ahora: Espada, Anillo, Escudo, Poción
-- Eliminar un elemento
table.remove(inventario, 2)
-- Ahora: Espada, Escudo, Poción
Usa el operador # para saber cuántos elementos tiene una tabla.
local enemigos = {"Goblin", "Orco", "Dragón"}
print(#enemigos) -- 3
-- Útil en bucles
for i = 1, #enemigos do
print(enemigos[i])
end
Las tablas también pueden almacenar pares clave-valor, como objetos en JavaScript.
local jugador = {
nombre = "Héroe",
nivel = 5,
vida = 100,
mana = 50
}
print(jugador.nombre) -- Héroe
print(jugador["nivel"]) -- 5
-- Modificar valores
jugador.vida = 80
jugador["mana"] = 30
-- Ejemplo más complejo: Enemigo con propiedades
local goblin = {
nombre = "Goblin",
vida = 30,
daño = 10,
oro = 50,
atacar = function()
print("¡El Goblin ataca!")
end
}
print(goblin.nombre) -- Goblin
goblin.atacar() -- ¡El Goblin ataca!
Hay varias formas de recorrer una tabla.
local inventario = {"Espada", "Escudo", "Poción"}
-- Forma 1: Con índices numéricos
for i = 1, #inventario do
print(i .. ". " .. inventario[i])
end
-- Forma 2: Con ipairs (más seguro)
for indice, item in ipairs(inventario) do
print(indice .. ". " .. item)
end
-- Recorrer tabla de diccionario
local jugador = {
nombre = "Héroe",
nivel = 5,
vida = 100
}
for clave, valor in pairs(jugador) do
print(clave .. ": " .. valor)
end
Lua tiene funciones especiales para trabajar con tablas.
local numeros = {3, 1, 4, 1, 5}
-- Ordenar
table.sort(numeros)
print(numeros) -- 1
-- Concatenar (unir elementos en un string)
local items = {"Espada", "Escudo", "Poción"}
local lista = table.concat(items, ", ")
print(lista) -- Espada, Escudo, Poción
Prueba esto en lua.org:
enemigos con 3 nombres de enemigos.table.insert para agregar un nuevo enemigo.# para imprimir cuántos enemigos hay.for ... in ipairs e imprime cada enemigo.