Tabellen
Tabellen sind Sammlungen von Einträgen mit Schlüsseln und Werten. Sie sind die einzige aggregierte Datenstruktur zur Verfügung gestellt. Alle anderen Datenstrukturen (Arrays, Listen, Sets usw.) werden aus Tabellen erstellt. Tabellenschlüssel und -werte können beliebig sein, einschließlich anderer Tabellen. Schlüssel und Werte innerhalb derselben Tabelle können Typen mischen.
- Tabellenkonstruktoren
- Tabellenverwendung
- Tabellen als Arrays
- Tabellen als Datensätze
Tabellenkonstruktoren
Mit Tabellenkonstruktoren können Sie eine Tabelle mit Schlüsseln und zugehörigen Werten angeben. Die Syntax lautet:
{[key1] = value1, [key2] = value2, …}
wobei die Schlüssel und Werte Ausdrücke sind. Wenn es sich bei den Schlüsseln um Zeichenfolgen handelt, die keine reservierten Wörter sind, können die Klammern und Anführungszeichen um die Schlüssel weggelassen werden. Beispiel:
{key1 = “value1”, key2 = “value2”, key3 = “value3”}
Eine leere Tabelle wird einfach durch {} angegeben.
Ein Tabellenkonstruktor kann in einer Zuweisung verwendet werden, um eine Variable auf eine Tabelle zu verweisen. Beispiele:
local t1 = {} – set t1 to an empty table local t2 = {key1 = “value1”, key2 = “value2”, key3 = “value3”}
Beachten Sie, dass Tabellen selbst anonym sind. Mehr als eine Variable kann auf dieselbe Tabelle verweisen. Fortsetzung des obigen Beispiels:
local t3 = t2 — sowohl t2 als auch t3 beziehen sich auf dieselbe Tabelle
Tabellenverwendung
Wie erwartet, können Sie Schlüssel verwenden, um Werte in einer Tabelle zu finden. Die Syntax ist[Tabellenschlüssel], wobei Tabelle eine Tabellenreferenz ist (normalerweise eine Variable, der einer Tabelle zugewiesen wurde), und Schlüssel ist ein Ausdruck, der den Schlüssel bereitstellt. Wenn dies in einem Ausdruck verwendet wird und der Schlüssel in der Tabelle vorhanden ist, wird der Wert zurückgegeben, der dem Schlüssel zugeordnet ist. Wenn sich der Schlüssel nicht in der Tabelle befindet, gibt dies null zurück. Wenn dies als Variable in einer Zuweisung verwendet wird und der Schlüssel nicht in der Tabelle vorhanden ist, wird ein neuer Eintrag für den Schlüssel und den Wert erstellt. Wenn der Schlüssel bereits in der Tabelle vorhanden ist, wird der Wert des Schlüssels durch den neuen Wert ersetzt. Beispiele:
local t = {} — setzt t auf eine leere Tabelle t[“k1”] = “v1” — erstellt einen Eintrag für den Schlüssel “k1” und den Wert “v1” v1 = t[“k1”] — setzt v1 auf den Wert für Schlüssel “k1” = “v1” t[“k1”] = “new_v1” — setzt den Wert für Schlüssel “k1” auf “new_v1”
Tabelle als Arrays
Das traditionelle Array kann mit einer Tabelle mit Integer-Schlüsseln als Indizes implementiert werden. Ein Array kann beliebige Indizes haben, einschließlich negativer, aber die Konvention besteht darin, Arrays am Index 1 zu starten (nicht 0, wie es bei Sprachen wie C und Java der Fall ist). Es gibt einen speziellen Tabellenkonstruktor für solche Arrays:
{value1, value2, value3, … }
Array-Referenzen sind dann[Array-Index].
Der Längenoperator # gibt die Anzahl der Elemente in einem Array mit aufeinanderfolgenden Indizes ab 1. Beispiel:
local a = {“value1”, “value2”, “value3”} local length = #a – sets length to the length of array a = 3
Arrays können dünn sein, wobei nur die definierten Elemente zugewiesen werden. Aber # kann nicht für ein spärliches Array mit nicht aufeinanderfolgenden Indizes verwendet werden. Beispiel:
local sparse_array = {} — richte ein leeres Array ein sparse_array[1] = “value1” — füge ein Element bei Index 1 sparse_array[99] = “value99” hinzu — füge ein Element bei Index 99 hinzu
Mehrdimensionale Arrays können als Tabellen von Tabellen eingerichtet werden. Zum Beispiel könnte eine 3x3-Matrix eingerichtet werden durch:
local m = {
{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
lokal v22 = m[2][2] — setzt v22 auf 5
Tabellen als Datensätze
Datensätze mit Feldern können als Tabellen mit Feldnamenschlüsseln implementiert werden. Das Referenzformular table.field kann für die Tabelle[“field”]verwendet werden. Beispiele:
local person = {name = “John Smith”, phone = “777-777-7777”} local name = person.name – sets name to “John Smith”
Ein Array von Tabellen kann für eine Sequenz von Datensätzen verwendet werden. Beispiel:
local people = { {name = “John Smith”, phone = “777-777-7777”}, {name = “Jane Doe”, phone = “888-888-8888”} … }
name = people[2].name - setzt den Namen auf “Jane Doe”