Lua-Tabelle
Eine Tabelle ist eine Datenstruktur in Lua, die uns hilft, verschiedene Datentypen zu erstellen, wie Arrays, Wörterbücher usw.
Lua-Tabellen verwenden assoziative Arrays. Sie können Werte jeden Typs als Array-Indizes verwenden, aber dieser Wert darf nicht nil sein.
Lua-Tabellen haben keine feste Größe; Sie können sie nach Bedarf erweitern.
Lua verwendet Tabellen auch, um Module, Pakete und Objekte umzusetzen. Zum Beispiel bedeutet string.format, "format" zum Indizieren der Tabelle string zu verwenden.
Tabellenkonstruktoren
Ein Konstruktor ist ein Ausdruck, der eine Tabelle erstellt und initialisiert. Tabellen sind ein leistungsstarkes und einzigartiges Merkmal von Lua. Der einfachste Konstruktor ist {}, der eine leere Tabelle erstellt. Arrays können direkt initialisiert werden:
mytable = {}
-- Wert angeben
mytable[1]= "Lua"
-- Referenz entfernen
mytable = nil
-- Lua-Garbage-Collection gibt Speicher frei
Wenn wir Elemente für Tabelle a festlegen und dann a an b zuweisen, zeigen sowohl a als auch b auf denselben Speicher. Wenn a auf nil gesetzt wird, kann b weiterhin auf die Elemente der Tabelle zugreifen. Wenn keine angegebene Variable auf a zeigt, wird der Garbage-Collection-Mechanismus von Lua den entsprechenden Speicher freigeben.
Das folgende Beispiel veranschaulicht die oben beschriebene Situation:
Beispiel
mytable = {}
print("Der Typ von mytable ist ",type(mytable))
mytable[1]= "Lua"
mytable["wow"] = "Vor der Änderung"
print("mytable-Element bei Index 1 ist ", mytable[1])
print("mytable-Element bei Index wow ist ", mytable["wow"])
-- alternatetable und mytable verweisen auf dieselbe Tabelle
alternatetable = mytable
print("alternatetable-Element bei Index 1 ist ", alternatetable[1])
print("alternatetable-Element bei Index wow ist ", alternatetable["wow"])
alternatetable["wow"] = "Nach der Änderung"
print("mytable-Element bei Index wow ist ", mytable["wow"])
-- Variable freigeben
alternatetable = nil
print("alternatetable ist ", alternatetable)
-- auf mytable kann weiterhin zugegriffen werden
print("mytable-Element bei Index wow ist ", mytable["wow"])
mytable = nil
print("mytable ist ", mytable)
Die Ausgabe des obigen Codes ist:
mytable 的类型是 table mytable 索引为 1 的元素是 Lua mytable 索引为 wow 的元素是 修改前 alternatetable 索引为 1 的元素是 Lua alternatetable 索引为 wow 的元素是 修改前 mytable 索引为 wow 的元素是 修改后 alternatetable 是 nil mytable 索引为 wow 的元素是 修改后 mytable 是 nil
Tabellenoperationen
Im Folgenden werden häufig verwendete Methoden für Tabellenoperationen aufgeführt:
| Nein. | Methode & Zweck |
|---|---|
| 1 | table.concat (table [, sep [, start [, end]]]): concat ist die Abkürzung für concatenate (verketten, verbinden). Die Funktion table.concat() listet alle Elemente des Array-Teils der angegebenen Tabelle in den Parametern von der Startposition bis zur Endposition auf, getrennt durch das angegebene Trennzeichen (sep). |
| 2 | table.insert (table, [pos,] value): Fügt ein Element mit dem angegebenen Wert an der angegebenen Position (pos) im Array-Teil der Tabelle ein. Der Parameter pos ist optional und standardmäßig das Ende des Array-Teils. |
| 3 | table.maxn (table) Gibt den größten Schlüsselwert unter allen positiven Schlüsselwerten in der angegebenen Tabelle zurück. Wenn kein Element mit einem positiven Schlüsselwert vorhanden ist, wird 0 zurückgegeben. (Nach Lua 5.2 existiert diese Methode nicht mehr. Dieser Artikel verwendet eine benutzerdefinierte Funktionsimplementierung.) |
| 4 | table.remove (table [, pos]) Gibt das Element an der Position pos im Array-Teil der Tabelle zurück. Die nachfolgenden Elemente werden nach vorne verschoben. Der Parameter pos ist optional und standardmäßig die Länge der Tabelle, d. h. die Entfernung beginnt beim letzten Element. |
| 5 | table.sort (table [, comp]) Sortiert die angegebene Tabelle in aufsteigender Reihenfolge. |
Als Nächstes sehen wir uns Beispiele für diese Methoden an.
Tabellenverkettung
Wir können concat() verwenden, um eine Zeichenkette auszugeben, die durch Verketten von Elementen in einer Liste gebildet wird:
Beispiel
-- Gibt die verkettete Zeichenkette der Tabelle zurück
print("Concatenated string ",table.concat(fruits))
-- Trennzeichen angeben
print("Concatenated string ",table.concat(fruits,", "))
-- Indizes zum Verketten der Tabelle angeben
print("Concatenated string ",table.concat(fruits,", ", 2,3))
Die Ausgabe des obigen Codes ist:
连接后的字符串 bananaorangeapple 连接后的字符串 banana, orange, apple 连接后的字符串 orange, apple
Einfügen und Entfernen
Das folgende Beispiel veranschaulicht die Einfüge- und Entfernungsoperationen von Tabellen:
Beispiel
-- Am Ende einfügen
table.insert(fruits,"mango")
print("Das Element an Index 4 ist ",fruits[4])
-- Einfügen am Schlüssel mit Index 2
table.insert(fruits,2,"Trauben")
print("Das Element an Index 2 ist ",fruits[2])
print("Das letzte Element ist ",fruits[5])
table.remove(fruits)
print("Nach dem Entfernen ist das letzte Element ",fruits[5])
Die Ausgabe des obigen Codes ist:
索引为 4 的元素为 mango 索引为 2 的元素为 grapes 最后一个元素为 mango 移除后最后一个元素为 nil
Tabellensortierung
Das folgende Beispiel zeigt die Verwendung der sort()-Methode zum Sortieren einer Tabelle:
Beispiel
print("Vor dem Sortieren")
for k,v in ipairs(fruits) do
print(k,v)
end
table.sort(fruits)
print("Nach dem Sortieren")
for k,v in ipairs(fruits) do
print(k,v)
end
Die Ausgabe des obigen Codes ist:
排序前 1 banana 2 orange 3 apple 4 grapes 排序后 1 apple 2 banana 3 grapes 4 orange
Maximaler Wert einer Tabelle
table.maxn existiert nach Lua 5.2 nicht mehr. Wir haben die Methode table_maxn definiert, um es zu implementieren.
Das folgende Beispiel zeigt, wie man den maximalen Wert in einer Tabelle ermittelt:
Beispiel
local mn=nil;
for k, v in pairs(t) do
if(mn==nil) then
mn=v
end
if mn < v then
mn = v
end
end
return mn
end
tbl = {[1] = 2, [2] = 6, [3] = 34, [26] =5}
print("Maximaler Wert von tbl: ", table_maxn(tbl))
print("Länge von tbl ", #tbl)
Die Ausgabe des obigen Codes ist:
tbl 最大值: 34 tbl 长度 3
Andere ErweiterungenHinweis:
When we get the length of a table, whether using#odertable.getn, wird das Zählen an der Stelle abgebrochen, an der der Index unterbrochen ist, was zu einer falschen Länge der Tabelle führt.
Stattdessen können Sie die folgende Methode verwenden:
function table_leng(t) local leng=0 for k, v in pairs(t) do leng=leng+1 end return leng; end