English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Tabellen sind eine Datenstruktur in Lua, die uns hilft, verschiedene Datentypen zu erstellen, wie z.B. Arrays, Dictionaries.
Lua Tabellen verwenden assoziative Arrays, Sie können beliebige Typen von Werten als Array-Indizes verwenden, aber dieser Wert darf nicht nil sein.
Lua Tabellen sind nicht fest in der Größe, sie können nach Bedarf erweitert werden.
Lua löst Module (module), Pakete (package) und Objekte (Object) auch über Tabellen. Zum Beispiel bedeutet string.format, dass "format" verwendet wird, um auf die Tabelle string zu verweisen.
Der Konstruktor ist ein Ausdruck zur Erstellung und Initialisierung von Tabellen. Tabellen sind eine leistungsstarke Funktion von Lua. Der einfachste Konstruktor ist {}, der eine leere Tabelle erstellt. Man kann die Tabelle direkt initialisieren:
-- Tabelleninitialisierung mytable = {} -- Bezugswert mytable[1] = "Lua" -- Referenzentfernung mytable = nil -- Lua freigibt den Speicher durch den Müllsammler
Wenn wir Elemente für table a setzen und a dann an b zuweisen, verweisen beide auf denselben Speicher. Wenn a auf nil gesetzt wird Wenn b die Elemente von table zugreifen kann, wird Lua das zugehörige Speicherwerkzeug bereinigen, wenn keine Variable a angegeben ist.
Nachfolgender Beispiel zeigt die beschriebenen Situationen:
-- Einfache table mytable = {} print("Der Typ von mytable ist ", type(mytable)) mytable[1] = "Lua" mytable["wow"] = "vor der Änderung" print("mytable mit Index ", mytable[ 1 Das Element ist ", mytable[1] print("Das Element von mytable mit Index wow ist ", mytable["wow"]) -- alternatetable und mytable beziehen sich auf denselben table alternatetable = mytable print("alternatetable mit Index ", alternatetable[ 1 Das Element ist ", alternatetable[1] print("Das Element von mytable mit Index wow ist ", alternatetable["wow"]) alternatetable["wow"] = "nach der Änderung" print("Das Element von mytable mit Index wow ist ", mytable["wow"]) -- Variable freigeben alternatetable = nil print("alternatetable ist ", alternatetable) -- mytable kann immer noch aufgerufen werden print("Das Element von mytable mit Index wow ist ", mytable["wow"]) mytable = nil print("mytable ist ", mytable)
Das Ergebnis des obigen Codes ist:
Der Typ von mytable ist nil, table mytable mit Index 1 Das Element ist nil, Lua Das Element von mytable mit Index wow ist nil, vor der Änderung alternatetable mit Index 1 Das Element ist nil, Lua Das Element von mytable mit Index wow ist nil, vor der Änderung Das Element von mytable mit Index wow ist nil, nach der Änderung alternatetable ist nil Das Element von mytable mit Index wow ist nil, nach der Änderung mytable ist nil
Nachfolgend sind die häufig verwendeten Methoden für Table-Operationen aufgelistet:
Nummer | Methode & Zweck |
---|---|
1 | table.concat(table [, sep [, start [, end]]]): concat ist die Abkürzung für concatenate(连锁, 连接). Die Funktion table.concat() gibt alle Elemente des angegebenen Arrays von table von der Position start bis end aus, getrennt durch den angegebenen Trennzeichen (sep). |
2 | table.insert(table, [pos,] value): Fügt ein Element mit dem Wert value an die angegebene Position (pos) im Arrayteil des table ein. Der pos-Parameter ist optional, die Standardwerte sind das Ende des Arrayteils. |
3 | table.maxn (table) Bestimme den größten Schlüsselwert mit positiven Werten im table. Wenn es keine Elemente mit positiven Schlüsselwerten gibt, wird 0 zurückgegeben. (Lua5.2Diese Methode existiert nicht mehr, dieses Dokument verwendet eine benutzerdefinierte Funktion.) |
4 | table.remove (table [, pos]) Gibt die Elemente des table-Arrays zurück, die sich in der Position pos befinden. Die folgenden Elemente werden verschoben. Der pos-Parameter ist optional, die Standardwerte sind die Länge des table, also wird von dem letzten Element abgebrochen. |
5 | table.sort (table [, comp]) Sortiert den gegebenen table aufsteigend. |
Nun sehen wir einige Beispiele für diese Methoden.
Wir können concat() verwenden, um eine Zeichenkette aus den Elementen einer Liste zu erzeugen:
fruits = {"banana","orange","apple"} -- Gibt die verknüpfte Zeichenkette von table zurück print("Verknüpfte Zeichenkette ",table.concat(fruits)) -- bestimmte Verknüpfungszeichen print("Verknüpfte Zeichenkette ",table.concat(fruits,",")) -- bestimmte Index zum Verknüpfen table print("Verknüpfte Zeichenkette ",table.concat(fruits,",", 2,3))
Die Ausgabe des folgenden Codes ist:
Verknüpfte Zeichenkette bananaorangeapple Verknüpfte Zeichenkette banana, orange, apple Verknüpfte Zeichenkette orange, apple
Nachfolgender Beispiel zeigt die Einfügung und Entfernung von table:
fruits = {"banana","orange","apple"} -- am Ende einfügen table.insert(fruits,"mango") print("Index ist 4 Element ist ",fruits[4] -- an Index 2 an Schlüsselstelle einfügen table.insert(fruits,2,"grapes") print("Index ist 2 Element ist ",fruits[2] print("Letztes Element ist ",fruits[5] table.remove(fruits) print("Entfernter letzter Element ist ",fruits[5]
Die Ausgabe des folgenden Codes ist:
Index ist 4 Element ist mango Index ist 2 Element ist grapes Letztes Element ist mango Entfernter letzter Element ist nil
Nachfolgender Beispiel zeigt die Verwendung der sort()-Methode, um eine Tabelle zu sortieren:
fruits = {"banana", "orange", "apple", "grapes"} print("Unsortiert") for k, v in ipairs(fruits) do print(k, v) end table.sort(fruits) print("Sortiert") for k, v in ipairs(fruits) do print(k, v) end
Die Ausgabe des folgenden Codes ist:
Unsortiert 1 banana 2 orange 3 apple 4 grapes Sortiert 1 apple 2 banana 3 grapes 4 orange
table.maxn in Lua5.2 Diese Methode existiert nicht mehr, wir haben die Methode table_maxn definiert, um dies zu erreichen.
Nachfolgender Beispiel zeigt, wie man den größten Wert in einer table ermittelt:
function table_maxn(t) 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("tbl-Maximalwert", table_maxn(tbl)) print("tbl-Länge", #tbl)
Die Ausgabe des folgenden Codes ist:
tbl-Maximalwert: 34 tbl-Länge 3
Hinweis:
Wenn wir die Länge der table erhalten, wird sowohl mit # als auch mit table.getn am Index-Ende abgebrochen, was zu einer falschen Längenbestimmung führt.
Man kann folgende Methoden verwenden, um sie zu ersetzen:
function table_leng(t) local leng=0 for k, v in pairs(t) do leng=leng+1 end return leng; end