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 Tabelle[Schlüssel], wobei Tabelle eine Tabellenreferenz ist (in der Regel eine Variable, die einer Tabelle zugewiesen ist), und key 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 = {} – sets t to an empty table t[“k1”] = “v1” – creates an entry for key “k1” and value “v1” v1 = t[“k1”] – sets v1 to the value for key “k1” = “v1” t[“k1”] = “new_v1” – sets the value for key “k1” to “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 = {} – set up an empty array sparse_array[1] = “value1” – add an element at index 1 sparse_array[99] = “value99” – add an element at index 99

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} } local v22 = m[2][2] – sets v22 to 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 verwendet werden[“field”]. 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 – sets name to “Jane Doe”