English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Lua-table(Tabelle)

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.

Tabellenkonstruktion

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

Table-Operationen

Nachfolgend sind die häufig verwendeten Methoden für Table-Operationen aufgelistet:

NummerMethode & Zweck
1table.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).

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

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

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

5table.sort (table [, comp])

Sortiert den gegebenen table aufsteigend.

Nun sehen wir einige Beispiele für diese Methoden.

Table Verknüpfung

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

Einfügen und Entfernen

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

Table 排序

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

Maximalwert der Tabelle

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