En Lua, los diccionarios se implementan a través de estructuras de datos llamadas tablas. Las tablas en Lua son muy flexibles y pueden utilizarse tanto como arreglos (listas) como diccionarios (pares clave-valor). Esto las convierte en una herramienta fundamental para almacenar y organizar datos.
Para crear un diccionario en Lua, simplemente declaras una tabla y defines pares clave-valor dentro de ella. Las claves pueden ser cadenas de texto, números o cualquier otro tipo de datos de Lua, mientras que los valores pueden ser de cualquier tipo.
local persona = {
nombre = "Carlos",
edad = 30,
profesion = "Ingeniero"
}
En este ejemplo, las claves son nombre
, edad
y profesion
, y están asociadas a sus respectivos valores.
Puedes acceder a los valores de un diccionario utilizando las claves. Hay dos formas comunes de hacerlo en Lua:
print(persona.nombre) -- Salida: Carlos
print(persona.edad) -- Salida: 30
print(persona["nombre"]) -- Salida: Carlos
print(persona["edad"]) -- Salida: 30
Ambos métodos son equivalentes. La notación de punto es más común cuando las claves son cadenas alfanuméricas simples.
Modificar los valores de un diccionario es tan fácil como asignar un nuevo valor a una clave existente.
persona.edad = 31 -- Cambia el valor de "edad" a 31
print(persona.edad) -- Salida: 31
Si asignas un valor a una clave que no existe en el diccionario, Lua simplemente agregará ese nuevo par clave-valor.
persona["ciudad"] = "Madrid" -- Añade una nueva clave "ciudad"
print(persona.ciudad) -- Salida: Madrid
Para eliminar un par clave-valor de un diccionario, puedes asignar nil
a la clave correspondiente.
persona.profesion = nil -- Elimina la clave "profesion"
print(persona.profesion) -- Salida: nil
Puedes recorrer todos los pares clave-valor de un diccionario utilizando el bucle for
con el iterador pairs()
.
for clave, valor in pairs(persona) do
print(clave, valor)
end
Esto imprimirá cada clave y su valor asociado en el diccionario.
Aunque en muchos lenguajes de programación las claves numéricas suelen estar reservadas para arreglos, en Lua puedes usar números como claves en un diccionario.
local estudiantes = {
[101] = "Ana",
[102] = "Luis",
[103] = "Pedro"
}
print(estudiantes[101]) -- Salida: Ana
Cuando usas claves numéricas no consecutivas, Lua trata la tabla como un diccionario en lugar de un arreglo.
Puedes crear diccionarios anidados (tablas dentro de tablas) para representar estructuras de datos más complejas.
local escuela = {
nombre = "Escuela Central",
ubicacion = "Centro",
estudiantes = {
["Ana"] = {edad = 14, grado = 9},
["Luis"] = {edad = 15, grado = 10}
}
}
-- Acceder a un valor dentro de un diccionario anidado
print(escuela.estudiantes["Ana"].edad) -- Salida: 14
En este ejemplo, la clave estudiantes
contiene un diccionario que almacena información sobre varios estudiantes.
Lua no incluye muchas funciones de utilidad para trabajar con tablas de forma predeterminada, pero puedes usar algunas funciones básicas como table.insert()
para agregar elementos en tablas con claves numéricas (arreglos).
Para contar cuántos pares clave-valor tiene un diccionario, puedes iterar sobre él o usar una función personalizada, ya que Lua no proporciona una función de tamaño directo para diccionarios.
function contarElementos(tabla)
local contador = 0
for _ in pairs(tabla) do
contador = contador + 1
end
return contador
end
print(contarElementos(persona)) -- Salida: 3 (siempre que no se haya eliminado ningún valor)
nil
: Ten cuidado al acceder a claves que podrían no existir, ya que esto devolverá nil
, lo que podría causar errores en operaciones posteriores si no se maneja adecuadamente.
Trabajar con diccionarios en Lua es simple gracias a la flexibilidad de las tablas. Al usarlas como diccionarios, puedes almacenar y organizar datos en pares clave-valor, acceder a ellos de manera eficiente, y realizar modificaciones fácilmente. Esta capacidad convierte a Lua en un lenguaje poderoso y dinámico para manejar datos estructurados.
Para obtener más detalles sobre cómo trabajar con tablas en Lua, consulta la documentación oficial de Lua.
Jorge García
Fullstack developer