Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender table
  2. Criar table
  3. Acessar/Alterar valores
  4. Descobrir tamanho
  5. Limpar uma table
  6. Usar funções básicas

Table é o um tipo de estrutura de dados nativo da linguagem Lua. Podemos adicionar valores de todos os tipos de dados estudados. Uma table é um tipo de dado dinâmico, sendo assim, seu tamanho pode ser variável.

Características
  1. Dinâmica : Pode crescer e diminuir
  2. Heterogênea : Aceita valores de tipos de dados diferentes
  3. Ordenada: Pode ser acessado por índice ou iterador

A declaração de uma table é semelhante a sintaxe utilizada para criar um vetor/matriz. Utilizamos { e } para iniciar uma table vazia.

Sintaxe
nome_table = {}
Exemplo 1
tabela = {}
Saída
-

Para inicializamos uma table durante sua declaração, podemos separar seus elementos por (,). No exemplo abaixo vamos exemplificar a característica heterogênea da uma table que a possibilidade de conter elementos de diferentes tipos.

Sintaxe
variavel = { elemento1, elemento2, elementoN}
Onde
elemento1...N: valor primitivo, vetor/matriz, função e outros tipos complexos
Exemplo 2
tabela = {1,"string"}
Saída
-

É muito importante lembrar que, assim como em vetores, as tables também não são baseadas em índice 0. O primeiro elemento está contido na posição 1.

Como uma table é ordenada, podemos acessar seus elementos utilizando sua posição dentro da table utilizando o indexador [].

Sintaxe
variavel[indice]
Retorno
elemento contido na table em indice.
Exemplo 3
tabela = {1,"string"}
print(tabela[1])
Saída
1

Para alterarmos um valor, basta acessarmos a posição desejada entre [ e ] como feito no acesso a vetores.

Exemplo 4
tabela = {1,"string"}
print("Antes:",tabela[1])
tabela[1] = 100
print("Depois:",tabela[1])

Saída
antes:	1
depois:	100

Para termos conhecimento sobre o tamanho de nossas tables, utilizamos o operador # já utilizado anteriormente para descobrirmos o tamanho de strings e vetores.

Sintaxe
#nome_table
Retorno
Valor inteiro que representa a quantidade de elemento em uma table
Exemplo 5
tabela = {1,"string"}
print("tamamnho",#tabela)
Saída
tamanho	3

Para excluirmos todos os elementos de uma table, é bem simples. Basta iniciar essa uma table novamente.

Sintaxe
variavel = {}
Exemplo 6
tabela = {1,"string",1.99}
print("tamanho antes:",#tabela)
tabela = {}
print("tamanho depois:",#tabela)
Saída
tamanho antes:	3
tamanho depois:	0

Sempre que uma table não for mais utilizada, por boa prática, atribuímos nil para liberação de recursos em memória.

A tipo de dado table possui funções para facilitar o uso desse tipo de dado. Nesta parte, vamos aprender algumas das principais.

Função Descrição Link
insert adicionar elemento Visitar
remove remover elemento Visitar
move mover/copiar elemento Visitar
pack empacota valores em uma nova table Visitar
unpack desempacota os valores em uma table Visitar
concat concatena uma table Visitar
sort Ordena os elementos de uma table Visitar

Anteriormente aprendemos a inicializar, acessar e alterar o conteúdo de um elemento contido em uma table. Para adicionarmos um novo elemento, precisamos utilizar a função insert.

Sintaxe
table.insert(table,[pos],value)
Onde
table : tabela onde desejamos inserir um novo elemento
pos: posição onde queremos adicionar um novo elemento. Se não informado, o novo elemento será inserido no fim.
value: valor que desejamos adicionar ou inserir
Exemplo 7
tabela = {1,"string",1.99}
table.insert(tabela,999)
print("Novo valor:",tabela[4])
Saída
Novo valor:	999

Para a remoção de um elemento em uma determinada posição dentro de uma table, utilizamos a função remove.

Sintaxe
table.remove(list[,pos])
Onde
list: table de onde queremos remover um elemento
pos: Posição do elemento que desejamos remover. Se não informado, o último elemento será resolvido.
Retorno
-
Exemplo 8
tab1 = {1,3,2,4}
print("Antes:",#tab1)
table.remove(tab1)
print("Depois:",#tab1)
Saída
Antes:	4
Depois:	3

Com a função move podemos copiar elementos de uma table para uma um segunda table baseados em um índice inicial, índice final e um índice base para a transferência dos valores.

Sintaxe
table.move(table1,f,e,t,table2)
Onde
table1: table origem de os dados serão copiados
f: índice inicial para cópia dos valores de a1
e: índice final para cópia dos valores de a1
t: índice base t2 para transferência.
table2: table destino para copia de dados
Retorno
-
Exemplo 9
tab1 = {1,3,2,4}
tab2 = {0,0,0,0} --iniciar zerada

--transfere elementos de 
--tab1[1],tab1[2],tab1[3] -> tab2[1],tab2[2],tab2[3]
table.move(tab1,1,3,1,tab2)

for i=1,#tab2,1 do
   print(tab2[i])
end
Saída
1
3
2
0

Com a função pack, podemos criar uma nova tabela baseado em uma lista de valores passados como argumento.

Sintaxe
table.pack(...)
Onde
…: Lista variável de valores para preenchermos a nova tabela.
Retorno
nova table contendo elementos de ...
Exemplo 9
local tab1 = table.pack(1,2,3)

for i=1,#tab1,1 do
   print(tab1[i])
end
Saída
1
2
3

Com a função unpack podemos recuperar os dados de uma table baseados em um índice inicial e final que são passados como argumento. Os dados recuperados são associados a variáveis.

Sintaxe
lista_variaveis = table.unpack (table [, i [, j]])
Onde
table: table com elementos que desejamos recuperar
i: índice inicial
j: índice final

Se os índices não forem informados, automaticamente os valores contidos na table serão associados de acordo com o número de variáveis informadas.

Retorno
elemento de tab de acordo com seus tipos
Exemplo 10
local tab1 = {1,2,3}
local a,b,c = table.unpack(tab1,1,3) -- ou table.unpack(tab1)
print(a)
print(b)
print(c)
Saída
1
2
3

Quando trabalhamos com table contendo elementos do tipo de dado string, podemos utilizar a função concat para retornar uma string contendo os elementos concanetados de uma table. Um separador pode ser utilizado como argumento da função.

Sintaxe
table.concat (table [, sep [, i [, j]]])
Onde
table: table que desejamos concatenar os elementos
sep: separador
i: índice inicial
j: índice final

Se i e j não forem especificados, todos os elementos da table serão concatenados. Caso contrário, apenas os elementos compreendidos entre os elementos serão concatenados.

Retorno
string contendo elementos de list concatenados
Exemplo 11
tab1 = {"str1","str2","str3","str4"}
local retorno = table.concat(tab1,':')
print(retorno)
Saída
str1:str2:str3:str4

Para a ordenação dos elementos em uma table, utilizamos a função sort. Com essa função os elementos de uma table são ordenados de forma crescente de acordo com o tipo de dado utilizado.

Sintaxe
table.sort (table [, comp])
Onde
table: table que desejamos ordenar
comp: função comparadora aplica a cada elemento da table. Opcional
Retorno
-
Exemplo 12
tabela = {1,3,2,4}
table.sort(tabela) --sort
for i=1,#tabela,1 do
   print(i,tabela[i]) --indice / elemento
end
Saída
1	1
2	2
3	3
4	4

Para tables com elementos heterogêneos não é aconselhável utilizar a função sort, pois ocorrerá erro na conversão dos tipos de dado impossibilitando uma ordenação correta.

  1. 12/09/2024 - revisão 3 - Correção em sintaxe unpack, pequenos ajustes gramaticais em geral
  2. 30/08/2024 - revisão 2 - Correção em links de objetivos
  3. 03/10/2023 - revisão 1 - Correção em referências e erros gramaticais
  4. 26/05/2023 - versão inicial