Lua - Mesas

Introducción

Las tablas son la única estructura de datos disponible en Lua que nos ayuda a crear diferentes tipos como matrices y diccionarios. Lua usa matrices asociativas y que se pueden indexar no solo con números sino también con cadenas, excepto nil. Las mesas no tienen un tamaño fijo y pueden crecer según nuestras necesidades.

Lua usa tablas en todas las representaciones, incluida la representación de paquetes. Cuando accedemos a un método string.format, significa que estamos accediendo a la función de formato disponible en el paquete string.

Representación y uso

Las tablas se llaman objetos y no son valores ni variables. Lua usa una expresión de constructor {} para crear una tabla vacía. Debe saberse que no existe una relación fija entre una variable que contiene la referencia de la tabla y la tabla en sí.

--sample table initialization
mytable = {}

--simple table value assignment
mytable[1]= "Lua"

--removing reference
mytable = nil

-- lua garbage collection will take care of releasing memory

Cuando tenemos una mesa a con conjunto de elementos y si lo asignamos a b, ambos a y bse refieren a la misma memoria. No se asigna memoria separada por separado para b. Cuando a se establece en cero, la tabla seguirá siendo accesible para b. Cuando no hay referencia a una tabla, la recolección de basura en Lua se encarga del proceso de limpieza para hacer que esta memoria sin referencia se reutilice nuevamente.

A continuación se muestra un ejemplo para explicar las características de las tablas mencionadas anteriormente.

-- Simple empty table
mytable = {}
print("Type of mytable is ",type(mytable))

mytable[1]= "Lua"
mytable["wow"] = "Tutorial"

print("mytable Element at index 1 is ", mytable[1])
print("mytable Element at index wow is ", mytable["wow"])

-- alternatetable and mytable refers to same table
alternatetable = mytable

print("alternatetable Element at index 1 is ", alternatetable[1])
print("alternatetable Element at index wow is ", alternatetable["wow"])

alternatetable["wow"] = "I changed it"

print("mytable Element at index wow is ", mytable["wow"])

-- only variable released and and not table
alternatetable = nil
print("alternatetable is ", alternatetable)

-- mytable is still accessible
print("mytable Element at index wow is ", mytable["wow"])

mytable = nil
print("mytable is ", mytable)

Cuando ejecutamos el programa anterior obtendremos el siguiente resultado:

Type of mytable is 	table
mytable Element at index 1 is 	Lua
mytable Element at index wow is 	Tutorial
alternatetable Element at index 1 is 	Lua
alternatetable Element at index wow is 	Tutorial
mytable Element at index wow is 	I changed it
alternatetable is 	nil
mytable Element at index wow is 	I changed it
mytable is 	nil

Manipulación de mesa

Hay funciones integradas para la manipulación de tablas y se enumeran en la siguiente tabla.

No Señor. Método y propósito
1

table.concat (table [, sep [, i [, j]]])

Concatena las cadenas en las tablas según los parámetros dados. Consulte el ejemplo para obtener más detalles.

2

table.insert (table, [pos,] value)

Inserta un valor en la tabla en la posición especificada.

3

table.maxn (table)

Devuelve el índice numérico más grande.

4

table.remove (table [, pos])

Elimina el valor de la tabla.

5

table.sort (table [, comp])

Ordena la tabla según el argumento de comparación opcional.

Veamos algunos ejemplos de las funciones anteriores.

Concatenación de tablas

Podemos usar la función concat para concatenar dos tablas como se muestra a continuación:

fruits = {"banana","orange","apple"}

-- returns concatenated string of table
print("Concatenated string ",table.concat(fruits))

--concatenate with a character
print("Concatenated string ",table.concat(fruits,", "))

--concatenate fruits based on index
print("Concatenated string ",table.concat(fruits,", ", 2,3))

Cuando ejecutamos el programa anterior obtendremos el siguiente resultado:

Concatenated string 	bananaorangeapple
Concatenated string 	banana, orange, apple
Concatenated string 	orange, apple

Insertar y quitar

La inserción y eliminación de elementos en tablas es más común en la manipulación de tablas. Se explica a continuación.

fruits = {"banana","orange","apple"}

-- insert a fruit at the end
table.insert(fruits,"mango")
print("Fruit at index 4 is ",fruits[4])

--insert fruit at index 2
table.insert(fruits,2,"grapes")
print("Fruit at index 2 is ",fruits[2])

print("The maximum elements in table is",table.maxn(fruits))

print("The last element is",fruits[5])

table.remove(fruits)
print("The previous last element is",fruits[5])

Cuando ejecutamos el programa anterior, obtendremos el siguiente resultado:

Fruit at index 4 is 	mango
Fruit at index 2 is 	grapes
The maximum elements in table is	5
The last element is	mango
The previous last element is	nil

Tablas de clasificación

A menudo requerimos ordenar una tabla en un orden particular. Las funciones de clasificación clasifican los elementos de una tabla alfabéticamente. A continuación se muestra un ejemplo de esto.

fruits = {"banana","orange","apple","grapes"}

for k,v in ipairs(fruits) do
   print(k,v)
end

table.sort(fruits)
print("sorted table")

for k,v in ipairs(fruits) do
   print(k,v)
end

Cuando ejecutamos el programa anterior obtendremos el siguiente resultado:

1	banana
2	orange
3	apple
4	grapes
sorted table
1	apple
2	banana
3	grapes
4	orange