Lua - Mesas

Introdução

As tabelas são a única estrutura de dados disponível em Lua que nos ajuda a criar diferentes tipos, como arrays e dicionários. Lua usa matrizes associativas e que podem ser indexadas não apenas com números, mas também com strings, exceto nil. As tabelas não têm tamanho fixo e podem crescer de acordo com nossa necessidade.

Lua usa tabelas em todas as representações, incluindo a representação de pacotes. Quando acessamos um método string.format, significa que estamos acessando a função de formatação disponível no pacote string.

Representação e Uso

As tabelas são chamadas de objetos e não são valores nem variáveis. Lua usa uma expressão construtora {} para criar uma tabela vazia. É preciso saber que não existe uma relação fixa entre uma variável que contém a referência da tabela e a própria tabela.

--sample table initialization
mytable = {}

--simple table value assignment
mytable[1]= "Lua"

--removing reference
mytable = nil

-- lua garbage collection will take care of releasing memory

Quando temos uma mesa a com um conjunto de elementos e se o atribuirmos a b, ambos a e breferem-se à mesma memória. Nenhuma memória separada é alocada separadamente para b. Quando a é definido como nulo, a tabela ainda estará acessível para b. Quando não há referência a uma tabela, a coleta de lixo em Lua cuida do processo de limpeza para fazer com que essa memória não referenciada seja reutilizada novamente.

Um exemplo é mostrado abaixo para explicar as características das tabelas mencionadas acima.

-- Simple empty table
mytable = {}
print("Type of mytable is ",type(mytable))

mytable[1]= "Lua"
mytable["wow"] = "Tutorial"

print("mytable Element at index 1 is ", mytable[1])
print("mytable Element at index wow is ", mytable["wow"])

-- alternatetable and mytable refers to same table
alternatetable = mytable

print("alternatetable Element at index 1 is ", alternatetable[1])
print("alternatetable Element at index wow is ", alternatetable["wow"])

alternatetable["wow"] = "I changed it"

print("mytable Element at index wow is ", mytable["wow"])

-- only variable released and and not table
alternatetable = nil
print("alternatetable is ", alternatetable)

-- mytable is still accessible
print("mytable Element at index wow is ", mytable["wow"])

mytable = nil
print("mytable is ", mytable)

Quando executamos o programa acima, obteremos a seguinte saída -

Type of mytable is 	table
mytable Element at index 1 is 	Lua
mytable Element at index wow is 	Tutorial
alternatetable Element at index 1 is 	Lua
alternatetable Element at index wow is 	Tutorial
mytable Element at index wow is 	I changed it
alternatetable is 	nil
mytable Element at index wow is 	I changed it
mytable is 	nil

Manipulação de Tabela

Existem funções incorporadas para manipulação de tabelas e estão listadas na tabela a seguir.

Sr. Não. Método e Objetivo
1

table.concat (table [, sep [, i [, j]]])

Concatena as strings nas tabelas com base nos parâmetros fornecidos. Veja o exemplo para detalhes.

2

table.insert (table, [pos,] value)

Insere um valor na tabela na posição especificada.

3

table.maxn (table)

Retorna o maior índice numérico.

4

table.remove (table [, pos])

Remove o valor da tabela.

5

table.sort (table [, comp])

Classifica a tabela com base no argumento do comparador opcional.

Vamos ver alguns exemplos das funções acima.

Concatenação de Tabela

Podemos usar a função concat para concatenar duas tabelas como mostrado abaixo -

fruits = {"banana","orange","apple"}

-- returns concatenated string of table
print("Concatenated string ",table.concat(fruits))

--concatenate with a character
print("Concatenated string ",table.concat(fruits,", "))

--concatenate fruits based on index
print("Concatenated string ",table.concat(fruits,", ", 2,3))

Quando executamos o programa acima, obteremos a seguinte saída -

Concatenated string 	bananaorangeapple
Concatenated string 	banana, orange, apple
Concatenated string 	orange, apple

Inserir e remover

A inserção e remoção de itens em tabelas são mais comuns na manipulação de tabelas. Isso é explicado a seguir.

fruits = {"banana","orange","apple"}

-- insert a fruit at the end
table.insert(fruits,"mango")
print("Fruit at index 4 is ",fruits[4])

--insert fruit at index 2
table.insert(fruits,2,"grapes")
print("Fruit at index 2 is ",fruits[2])

print("The maximum elements in table is",table.maxn(fruits))

print("The last element is",fruits[5])

table.remove(fruits)
print("The previous last element is",fruits[5])

Quando executarmos o programa acima, obteremos a seguinte saída -

Fruit at index 4 is 	mango
Fruit at index 2 is 	grapes
The maximum elements in table is	5
The last element is	mango
The previous last element is	nil

Classificando tabelas

Freqüentemente, solicitamos classificar uma tabela em uma ordem específica. As funções de classificação classificam os elementos em uma tabela em ordem alfabética. Um exemplo disso é mostrado abaixo.

fruits = {"banana","orange","apple","grapes"}

for k,v in ipairs(fruits) do
   print(k,v)
end

table.sort(fruits)
print("sorted table")

for k,v in ipairs(fruits) do
   print(k,v)
end

Quando executamos o programa acima, obteremos a seguinte saída -

1	banana
2	orange
3	apple
4	grapes
sorted table
1	apple
2	banana
3	grapes
4	orange