Tablas

Tablas


En Conceptos básicos Lua vimos que existía un tipo de datos llamado tabla, estas son el único mecanismo de estructuración de datos en Lua.

Son comparables a lo que en otros lenguajes de programación se conocen como array, que de una forma sencilla es la asignación de varios valores a una única variable, se entenderá mejor en código.

Creando tablas

Para declarar una tabla o array se realiza como si de cualquier variable se tratara, solo que se usan {} para contener los datos
tabla = {} --declara una tabla vaciá tabla1 = {"Ocitronix", "Programación básica"} -- una array de una dimensión

Usando tablas

Empecemos por la explicación de un array sencillo y genérico para la mayoría de lenguajes de programación.

Para asignar un valor a un array vacío, solo basta con seleccionar la clave o indice del dato
tabla = {} --crea el arreglo tabla[1] = "uno" tabla[2] = "dos"
Esto quiere decir que tabla ahora tiene asignados dos valores "uno" y "dos" imaginemos que es como si tuviéramos tabla = {"uno","dos"}.

Para leer un array solo vasta con ir a su clave
tabla = {"a","b","c"} print( tabla[1] ) print( tabla[2] )

Propiedades Lua

Ahora que ya conocemos de forma general como se usan los array veremos las cualidades especificas que le da Lua a sus tables.

Creando tablas

No solo se puede asignar un valor usando un indice, sino que permite crear un nombre clave
tabla = {} tabla[1] = "a" --se asigna el valor a al indice 1 tabla["iden"] = 3 -- se asigna el valor 3 a la llave "iden" tabla.pos = "b" --asigna el valor "b" a la llave pos
También es posible asignar la llave al momento de declarar la tabla
tabla = { [1] = "a", [2] = "b", [3]= "c" } tabla2 = { ["pos1"] = "a", ["pos2"] = "b", ["pos3"]= "c" }

Accediendo a tablas

Para acceder a los valores de una tabla se realiza igual que en un array normal con la particularidad de poder llamarlas usando un punto antes del identificador que no es un indice.
tabla = {"a", [2] = "b", ["ident"] = "hola"} print(tabla[1]) print(tabla[2]) print(tabla["ident"]) print(tabla.ident)

Operador #

Cuando vimos Operadores en Lua vimos el operador longitud # que devolvía la longitud de caracteres de un string, si lo usas en una tabla podrás ver el tamaño de la misma.
tabla = {"a", "b", "c"} print(#tabla)

Funciones

Lua ofrece unas instrucciones especificas para trabajar con tablas

table.insert

Sirve para agregar un valor a una tabla creada
tabla = {} table.insert(t, 123) tabla[2] = 321 print(t[1]) print(t[2])
También es posible seleccionar el indice al cual agregar el valor
tabla = {"a", "c"} table.insert(tabla, 2, "b") print(tabla[1], tabla[2], tabla[3])

table.remove

Elimina un ítem con el indice a eliminar
tabla = {"a", "b", "c"} table.remove(tabla, 2) print(t[1], t[2)]

table.concat

Sirve para unir los valores de un array
tabla = {"a", "b", "c"} print(table.concat(tabla, ";"))

Iterador

En Estructuras de control en Lua observamos como hacer ciclos que bien nos serviría para llenar una tabla vacía o para imprimir el contenido.

Veamos el primer caso: supongamos que deseamos crear una tabla que guarde 100 números
tabla = {} print("la tabla es de: "..#tabla) for i=1,100 do tabla[i] = i end print("la tabla es de: "..#tabla)
Bien ahora queremos imprimir en pantalla el contenido de la tabla y lo primero que se nos viene a la cabeza seria agregar lo siguiente:
for i=1,100 do print(tabla[i]) end
Y funciona, pero en Estructuras de control en Lua mencionamos un loop for iterador que esta echo específicamente para recorrer tablas y se puede usar de dos formas:

función ipairs

La función ipairs actúa en dos pares un indice y un valor es algo asi como decir (1,tabla[1]),(2,tabla[2]), agreguemos el siguiente código a lo que ya tenemos
for i,v in ipairs(tabla) do print(i,v) end
Se imprimirá una lista de los 100 valores de la tabla con una estrucntura de indice y valor de la sigiente forma:
1 1 2 2 3 3 ... ... -- y asi hasta 100 100

función pairs

Es similar a la función anterior con la diferencia de iterar sobre todas las parejas no solo indice valor sino clave valor y su estructura es:
tabla = {"a", "b", [123]="hola", "c", nombre="Ocitronix", "d", "e"} for k,v in pairs(tabla) do print(k,v) end
En este caso se visualizara todo el contenido de la tabla

Video

Comentarios

Publicar un comentario

Entradas más populares de este blog

SAFE MODE en PS Vita