English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

table (tabela) do Lua

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.

Construção de table (tabela)

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

Operação de Table

A seguir estão listados os métodos comuns de operação de Table:

NúmeroMétodo & finalidade
1table.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.

2table.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.

3table.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)

4table.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.

5table.sort (table [, comp])

Ordenar o table fornecido em ordem crescente.

A seguir, vamos ver alguns exemplos desses métodos.

Conexão do Table

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

Inserção e remoção

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

Table ordenação

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

Maior valor da Tabela

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