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

  1. Tipo table
  2. Criar table
  3. Acessar/Alterar valores
  4. Descobrir tamanho
  5. Limpar uma table
  6. Funções básicas
  7. mais funções nativas

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
minha_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, ... , elementoN}
Onde
elemento1...N: valor primitivo, vetor/matriz, função e outros tipos complexos
Exemplo 2
tabela = {1,"string"}
Saída
-

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

É 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.

Sintaxe
nome_table[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
nome_table = {}
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ções.

Tab. 1: Funções mais comuns
Função Descrição
insert adicionar elemento
remove remover elemento
move mover/copiar elemento
pack empacota valores em uma nova table
Visitar desempacota os valores em uma table
concat concatena uma table
sort Ordena os elementos de uma table

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 do novo elemento. Se não informado, o novo elemento será adicionado no fim.
value: valor para 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 em 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 table de destino. Os índices inicial, índice final e um índice base para a transferência dos valores são passaos como argumento.

Sintaxe
table.move(table1, f, e, t, <table2>)
Onde
table1: table origem de os dados
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 de destino da cópia.
<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 ou 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(table1 [, i [, j]])
Onde
table1: 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(s) de table1 entre i e j
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 tables. Um separador pode ser utilizado como argumento da função.

Sintaxe
table.concat(table1 [, <sep> [, i [, j]]])
Onde
table1: 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 i a j de table1 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
tablee.sort(table1 [, <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. 15/09/2025 - revisão 4 - Ajustes: pontuais, sintaxes, objetivos e tab. funções
  2. 12/09/2024 - revisão 3 - Correção em sintaxe unpack, pequenos ajustes gramaticais em geral
  3. 30/08/2024 - revisão 2 - Correção em links de objetivos
  4. 03/10/2023 - revisão 1 - Correção em referências e erros gramaticais
  5. 26/05/2023 - versão inicial