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:

-- Tabelle initialisieren
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

-- Einfache Tabelle
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
1table.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).

2table.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.

3table.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.)

4table.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.

5table.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

fruits = {"banana","orange","apple"}
-- 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

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

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

fruits = {"banana","orange","apple","Trauben"}
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

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("Maximaler Wert von tbl: ", table_maxn(tbl))
print("Länge von tbl ", #tbl)

Die Ausgabe des obigen Codes ist:

tbl 最大值:    34
tbl 长度     3

Hinweis:

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
Andere Erweiterungen