English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La tabla es un tipo de estructura de datos en Lua que nos ayuda a crear diferentes tipos de datos, como: arrays, diccionarios, etc.
La tabla de Lua utiliza un array asociativo, puede usar cualquier tipo de valor como índice del array, pero este valor no puede ser nil.
La tabla de Lua no tiene un tamaño fijo, puede ampliarla según sus necesidades.
Lua también resuelve módulos (module), paquetes (package) y objetos (Object) a través de tablas. Por ejemplo, string.format indica que se utiliza "format" para indexar table string.
El constructor es una expresión para crear e inicializar una tabla. La tabla es una función especial poderosa de Lua. La función constructor más simple es {}, que se utiliza para crear una tabla vacía. Puede inicializar un array directamente:
-- Inicializar tabla mytable = {} -- Especificar valor mytable[1} -- Remover referencias mytable = nil -- La recolección de basura de Lua liberará la memoria
Cuando establecemos elementos en table a y luego asignamos a a b, tanto a como b apuntan al mismo espacio de memoria. Si a se establece como nil Si b puede acceder a los elementos de table, entonces también puede hacerlo. Si no hay una variable especificada para a, el mecanismo de recolección de basura de Lua limpiará la memoria correspondiente.
El siguiente ejemplo demuestra la situación descrita anteriormente:
-- table simple mytable = {} print("El tipo de mytable es ", type(mytable)) mytable[1} mytable["wow"] = "modificado" print("El índice mytable es 1 es ", mytable[1)] print("El elemento en la posición wow de mytable es ", mytable["wow"]) -- alternatetable y mytable se refieren al mismo table alternatetable = mytable print("El índice alternatetable es 1 es ", alternatetable[1)] print("El elemento en la posición wow de mytable es ", alternatetable["wow"]) alternatetable["wow"] = "modificado" print("El elemento en la posición wow de mytable es ", mytable["wow"]) -- Liberar variables alternatetable = nil print("alternatetable es ", alternatetable) -- mytable aún se puede acceder print("El elemento en la posición wow de mytable es ", mytable["wow"]) mytable = nil print("mytable es ", mytable)
El resultado de la ejecución del código anterior es:
El tipo de mytable es nil, table El índice mytable es 1 es nil, Lua El elemento en la posición wow de mytable es nil, antes de la modificación El índice alternatetable es 1 es nil, Lua El elemento en la posición wow de mytable es nil, antes de la modificación El elemento en la posición wow de mytable es nil, después de la modificación alternatetable es nil El elemento en la posición wow de mytable es nil, después de la modificación mytable es nil
A continuación se enumeran los métodos más comunes para la operación de Table:
Número de orden | Método & Propósito |
---|---|
1 | table.concat (table [, sep [, start [, end]]]): concat es la abreviatura de concatenate (enlazar, conectar). La función table.concat() enumera todos los elementos del array especificado por table desde la posición start hasta la posición end, separados por el separador especificado (sep). |
2 | table.insert (table, [pos,] value): Insertar un elemento de valor value en la posición (pos) del array parte del table. El parámetro pos es opcional, por defecto es el final del array parte. |
3 | table.maxn (table) Especificar el valor clave más grande de todos los valores clave positivos del table. Si no existe ningún elemento con clave positiva, se devuelve 0. (Lua5.2Después de esto, este método ya no existe, en este artículo se utiliza una función personalizada.) |
4 | table.remove (table [, pos]) Devuelve una parte del array de table ubicada en la posición pos. Los elementos posteriores se desplazarán. El parámetro pos es opcional, por defecto es la longitud de table, es decir, desde el último elemento. |
5 | table.sort (table [, comp]) Ordenar el table dado en orden ascendente. |
Ahora veamos algunos ejemplos de estos métodos.
Podemos usar concat() para output una cadena que conecta los elementos de una lista:
fruits = {"banana","orange","apple"} -- retorna la cadena conectada de table print("La cadena conectada ",table.concat(fruits)) -- especificar el carácter de conexión print("La cadena conectada ",table.concat(fruits,", ")) -- conectar especificando el índice table print("La cadena conectada ",table.concat(fruits,", ", 2,3))
El resultado de ejecutar el código anterior es:
La cadena conectada ",bananaorangeapple La cadena conectada ",banana, orange, apple La cadena conectada ",orange, apple
El siguiente ejemplo muestra las operaciones de inserción y eliminación de table:
fruits = {"banana","orange","apple"} -- insertar al final table.insert(fruits,"mango") print("Índice de 4 El elemento es ",fruits[4)] -- en la posición de índice 2 insertar en la posición clave table.insert(fruits,2,"uvas") print("Índice de 2 El elemento es ",fruits[2)] print("El último elemento es ",fruits[5)] table.remove(fruits) print("El último elemento después de la eliminación es ",fruits[5)]
El resultado de ejecutar el código anterior es:
Índice de 4 El elemento es mango Índice de 2 Los elementos son uvas El último elemento es mango El último elemento después de la eliminación es nil
El siguiente ejemplo muestra el uso del método sort(), utilizado para ordenar una tabla:
fruits = {"banana", "orange", "apple", "grapes"} print("Antes de ordenar") for k, v in ipairs(fruits) do print(k, v) end table.sort(fruits) print("Ordenado") for k, v in ipairs(fruits) do print(k, v) end
El resultado de ejecutar el código anterior es:
Antes de ordenar 1 banana 2 orange 3 apple 4 grapes Ordenado 1 apple 2 banana 3 grapes 4 orange
table.maxn en Lua5.2 Este método ya no existe, por lo que hemos definido el método table_maxn para implementarlo.
El siguiente ejemplo muestra cómo obtener el valor máximo de una table:
function table_maxn(t) local mn = nil; for k, v in pairs(t) do if mn == nil then mn = v end if mn < v then mn = v end end return mn end tbl = {[1] = 2, [2] = 6, [3] = 34, [26] =5} print("Valor máximo de tbl", table_maxn(tbl)) print("Longitud de tbl", #tbl)
El resultado de ejecutar el código anterior es:
Valor máximo de tbl: 34 Longitud de tbl 3
Nota:
Cuando obtenemos la longitud de una table, ya sea usando # o table.getn, ambos detendrán la cuenta en el punto de interrupción del índice, lo que lleva a que no se pueda obtener correctamente la longitud de la table.
Se puede utilizar el siguiente método en su lugar:
function table_leng(t) local leng = 0 for k, v in pairs(t) do leng = leng+1 end return leng; end