Lua - Tabellen

Einführung

Tabellen sind die einzige in Lua verfügbare Datenstruktur, mit deren Hilfe wir verschiedene Typen wie Arrays und Wörterbücher erstellen können. Lua verwendet assoziative Arrays, die nicht nur mit Zahlen, sondern auch mit Zeichenfolgen außer Null indiziert werden können. Tische haben keine feste Größe und können je nach Bedarf wachsen.

Lua verwendet Tabellen in allen Darstellungen, einschließlich der Darstellung von Paketen. Wenn wir auf eine Methode string.format zugreifen, bedeutet dies, dass wir auf die im String-Paket verfügbare Formatfunktion zugreifen.

Darstellung und Verwendung

Tabellen werden als Objekte bezeichnet und sind weder Werte noch Variablen. Lua verwendet einen Konstruktorausdruck {}, um eine leere Tabelle zu erstellen. Es ist bekannt, dass es keine feste Beziehung zwischen einer Variablen, die die Referenz der Tabelle enthält, und der Tabelle selbst gibt.

--sample table initialization
mytable = {}

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

--removing reference
mytable = nil

-- lua garbage collection will take care of releasing memory

Wenn wir einen Tisch haben a mit Satz von Elementen und wenn wir es zuweisen b, beide a und bbeziehen sich auf den gleichen Speicher. Für b wird kein separater Speicher separat zugewiesen. Wenn a auf Null gesetzt ist, ist die Tabelle weiterhin für b zugänglich. Wenn kein Verweis auf eine Tabelle vorhanden ist, kümmert sich die Speicherbereinigung in Lua um den Bereinigungsprozess, damit dieser nicht referenzierte Speicher wieder verwendet wird.

Im Folgenden wird ein Beispiel zur Erläuterung der oben genannten Funktionen von Tabellen gezeigt.

-- 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)

Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:

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

Tabellenmanipulation

Es gibt integrierte Funktionen für die Tabellenmanipulation, die in der folgenden Tabelle aufgeführt sind.

Sr.Nr. Methode & Zweck
1

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

Verkettet die Zeichenfolgen in den Tabellen basierend auf den angegebenen Parametern. Siehe Beispiel für Details.

2

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

Fügt an der angegebenen Position einen Wert in die Tabelle ein.

3

table.maxn (table)

Gibt den größten numerischen Index zurück.

4

table.remove (table [, pos])

Entfernt den Wert aus der Tabelle.

5

table.sort (table [, comp])

Sortiert die Tabelle basierend auf dem optionalen Komparatorargument.

Lassen Sie uns einige Beispiele der oben genannten Funktionen sehen.

Tabellenverkettung

Wir können die concat-Funktion verwenden, um zwei Tabellen wie unten gezeigt zu verketten -

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))

Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:

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

Einfügen und entfernen

Das Einfügen und Entfernen von Elementen in Tabellen ist bei der Tabellenmanipulation am häufigsten. Es wird unten erklärt.

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])

Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:

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

Tabellen sortieren

Wir müssen häufig eine Tabelle in einer bestimmten Reihenfolge sortieren. Die Sortierfunktionen sortieren die Elemente in einer Tabelle alphabetisch. Ein Beispiel hierfür ist unten gezeigt.

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

Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:

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