English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A table é um tipo de estrutura de dados do Lua usada para nos ajudar a criar diferentes tipos de dados, como: arrays, dicionários, etc.
A table do Lua usa arrays associativos, você pode usar qualquer tipo de valor como índice do array, mas esse valor não pode ser nil.
A table do Lua não tem tamanho fixo, você pode expandi-la conforme necessário.
O Lua também resolve módulos (module), pacotes (package) e objetos (Object) através de tables. Por exemplo, string.format representa usar "format" para indexar a table string.
O construtor é uma expressão para criar e inicializar a tabela. A tabela é uma funcionalidade poderosa específica do Lua. O construtor mais simples é {}, usado para criar uma tabela vazia. Você pode inicializar diretamente um array:
-- Inicializar a tabela mytable = {} -- Especificar valor mytable[1]= "Lua" -- Remover referências mytable = nil -- O mecanismo de coleta de lixo do Lua liberará a memória
Quando atribuímos elementos à table a e, em seguida, atribuímos a à b, então a e b apontam para a mesma memória. Se a for definida como nil Se b também puder acessar os elementos da table, se não houver variável especificada para a, o mecanismo de coleta de lixo do Lua limpará a memória correspondente.
A seguir está um exemplo que demonstra a situação descrita acima:
-- table simples mytable = {} print("O tipo de mytable é ", type(mytable)) mytable[1]= "Lua" mytable["wow"] = "modificado antes" print("O índice mytable é 1 o elemento é ", mytable[1]) print("O elemento do índice wow de mytable é ", mytable["wow"]) -- alternatetable e mytable se referem ao mesmo table alternatetable = mytable print("O índice alternatetable é 1 o elemento é ", alternatetable[1]) print("O elemento do índice wow de mytable é ", alternatetable["wow"]) alternatetable["wow"] = "modificado" print("O elemento do índice wow de mytable é ", mytable["wow"]) -- Liberar variáveis alternatetable = nil print("alternatetable é ", alternatetable) -- mytable ainda pode ser acessado print("O elemento do índice wow de mytable é ", mytable["wow"]) mytable = nil print("mytable é ", mytable)
O resultado da execução do código acima é:
O tipo de mytable é nil, table O índice mytable é 1 o elemento é nil, Lua O elemento do índice wow de mytable é nil, antes da modificação O índice alternatetable é 1 o elemento é nil, Lua O elemento do índice wow de mytable é nil, antes da modificação O elemento do índice wow de mytable é nil, após a modificação alternatetable é nil O elemento do índice wow de mytable é nil, após a modificação mytable é nil
A seguir estão listados os métodos comuns de operação de Table:
Número | Método & finalidade |
---|---|
1 | table.concat (table [, sep [, start [, end]]]): concat é a abreviação de concatenate (ligação, conexão). A função table.concat() lista todos os elementos do array especificado no parâmetro table, a partir da posição start até a posição end, separados por um separador (sep) especificado. |
2 | table.insert (table, [pos,] value): Inserir um elemento de valor value em uma posição específica (pos) do array do table. O parâmetro pos é opcional, o valor padrão é o final do array. |
3 | table.maxn (table) Especificar o maior valor de chave positivo no table. Se não existir elemento com chave positiva, retorna 0. (Lua5.2Depois que este método já não existe, este artigo usou função personalizada para implementar) |
4 | table.remove (table [, pos]) Retorna parte do array do table localizada no pos. Seus elementos subsequentes serão movidos. O parâmetro pos é opcional, o valor padrão é o comprimento do table, ou seja, remove a partir do último elemento. |
5 | table.sort (table [, comp]) Ordenar o table fornecido em ordem crescente. |
A seguir, vamos ver alguns exemplos desses métodos.
Podemos usar concat() para outputar uma string concatenada dos elementos de uma lista:
fruits = {"banana","orange","apple"} -- retorna a string concatenada do table print("String concatenada após a conexão ",table.concat(fruits)) -- especificar o caractere de conexão print("String concatenada após a conexão ",table.concat(fruits,", ")) -- especificar o índice para concatenar table print("String concatenada após a conexão ",table.concat(fruits,", ", 2,3))
A execução do código acima resulta no seguinte resultado:
String concatenada após a conexão bananaorangeapple String concatenada após a conexão banana, orange, apple String concatenada após a conexão orange, apple
O seguinte exemplo demonstra as operações de inserção e remoção do table:
fruits = {"banana","orange","apple"} -- inserir no final table.insert(fruits,"mango") print("Índice de 4 O elemento é ",fruits[4]) -- Inserir no índice 2 inserir no local da chave table.insert(fruits,2,"grapes") print("Índice de 2 O elemento é ",fruits[2]) print("O último elemento é ",fruits[5]) table.remove(fruits) print("O último elemento removido é ",fruits[5])
A execução do código acima resulta no seguinte resultado:
Índice de 4 O elemento é mango Índice de 2 O elemento é grapes O último elemento é mango O último elemento removido é nil
O seguinte exemplo demonstra o uso do método sort(), usado para classificar tabelas:
fruits = {"banana","orange","apple","grapes"} print("Antes de classificar") por k, v in ipairs(fruits) do print(k, v) fim table.sort(fruits) print("Depois de classificar") por k, v in ipairs(fruits) do print(k, v) fim
A execução do código acima resulta no seguinte resultado:
Antes de classificar 1 banana 2 orange 3 apple 4 grapes Depois de classificar 1 apple 2 banana 3 grapes 4 orange
table.maxn no Lua5.2 Depois que este método já não existe, definimos a função table_maxn para implementá-lo.
O seguinte exemplo demonstra como obter o maior valor de uma tabela:
function table_maxn(t) local mn = nil; por k, v em pairs(t) do se mn == nil then mn = v fim se mn < v then mn = v fim fim return mn fim tbl = {[1] = 2, [2] = 6, [3] = 34, [26] =5} print("Maior valor da tbl", table_maxn(tbl)) print("Tamanho da tbl", #tbl)
A execução do código acima resulta no seguinte resultado:
Maior valor da tbl: 34 Tamanho da tbl 3
Atenção:
Quando obtemos o comprimento de uma tabela, seja usando # ou table.getn, ambos param no ponto de interrupção do índice, resultando em não poder obter o comprimento correto da tabela.
Você pode usar os seguintes métodos em vez disso:
function table_leng(t) local leng=0 por k, v em pairs(t) do leng=leng+1 fim return leng; fim