Lua - Tavoli

introduzione

Le tabelle sono l'unica struttura di dati disponibile in Lua che ci aiuta a creare diversi tipi come array e dizionari. Lua utilizza array associativi e che possono essere indicizzati non solo con numeri ma anche con stringhe tranne nil. I tavoli non hanno dimensioni fisse e possono crescere in base alle nostre esigenze.

Lua utilizza le tabelle in tutte le rappresentazioni, inclusa la rappresentazione dei pacchetti. Quando accediamo a un metodo string.format, significa che stiamo accedendo alla funzione di formattazione disponibile nel pacchetto string.

Rappresentazione e utilizzo

Le tabelle sono chiamate oggetti e non sono né valori né variabili. Lua utilizza un'espressione del costruttore {} per creare una tabella vuota. È noto che non esiste una relazione fissa tra una variabile che contiene il riferimento della tabella e la tabella stessa.

--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 abbiamo un tavolo a con un insieme di elementi e se lo assegniamo a b, tutti e due a e bfare riferimento alla stessa memoria. Nessuna memoria separata viene allocata separatamente per b. Quando a è impostato su zero, la tabella sarà ancora accessibile a b. Quando non ci sono riferimenti a una tabella, la garbage collection in Lua si occupa di ripulire il processo per riutilizzare di nuovo la memoria non referenziata.

Di seguito è riportato un esempio per spiegare le caratteristiche delle tabelle sopra menzionate.

-- 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 eseguiamo il programma precedente, otterremo il seguente output:

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

Manipolazione della tabella

Sono presenti funzioni integrate per la manipolazione delle tabelle e sono elencate nella tabella seguente.

Sr.No. Metodo e scopo
1

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

Concatena le stringhe nelle tabelle in base ai parametri forniti. Vedi esempio per i dettagli.

2

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

Inserisce un valore nella tabella nella posizione specificata.

3

table.maxn (table)

Restituisce l'indice numerico più grande.

4

table.remove (table [, pos])

Rimuove il valore dalla tabella.

5

table.sort (table [, comp])

Ordina la tabella in base all'argomento del comparatore facoltativo.

Vediamo alcuni esempi delle funzioni di cui sopra.

Tabella concatenazione

Possiamo usare la funzione concat per concatenare due tabelle come mostrato di seguito -

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 eseguiamo il programma precedente, otterremo il seguente output:

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

Inserisci e rimuovi

L'inserimento e la rimozione di elementi nelle tabelle è più comune nella manipolazione delle tabelle. È spiegato di seguito.

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 eseguiamo il programma sopra, otterremo il seguente output:

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

Tabelle di ordinamento

Spesso abbiamo bisogno di ordinare una tabella in un ordine particolare. Le funzioni di ordinamento ordinano gli elementi in una tabella in ordine alfabetico. Un esempio per questo è mostrato di seguito.

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 eseguiamo il programma precedente, otterremo il seguente output:

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