Tabellen

Tabellen sind Sammlungen von Einträgen mit Schlüsseln und Werten. Sie sind die einzige bereitgestellte aggregierte Datenstruktur. Alle anderen Datenstrukturen (Arrays, Listen, Sets usw.) werden aus Tabellen erstellt. Tabellenschlüssel und -werte können einen beliebigen Typ haben, einschließlich anderer Tabellen. Schlüssel und Werte innerhalb derselben Tabelle können Typen mischen.

  • Tabellenkonstruktoren
  • Verwendung der Tabelle
  • 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 Zeichenketten 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 so zu setzen, dass sie auf eine Tabelle verweist. Beispiele:

local t1 = {} – set t1 to an empty table local t2 = {key1 = “value1”, key2 = “value2”, key3 = “value3”}

Beachten Sie, dass die Tabellen selbst anonym sind. Mehr als eine Variable kann sich auf dieselbe Tabelle beziehen. Fortsetzung des obigen Beispiels:

local t3 = t2 – sowohl t2 als auch t3 beziehen sich auf dieselbe Tabelle

Verwendung der Tabelle

Wie erwartet, können Sie Schlüssel verwenden, um Werte in einer Tabelle zu finden. Die Syntax lautet table[key], wobei table eine Tabellenreferenz ist (normalerweise eine Variable, der eine Tabelle zugewiesen ist) und key ein Ausdruck ist, 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 der Schlüssel nicht in der Tabelle enthalten ist, wird nil zurückgegeben. Wenn dies als Variable in einer Zuweisung verwendet wird und der Schlüssel in der Tabelle nicht 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, ersetzt er den Wert des Schlüssels durch den neuen Wert. 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 mithilfe einer Tabelle mit Integer-Schlüsseln als Indizes implementiert werden. Ein Array kann beliebige Indizes haben, auch negative, aber die Konvention besteht darin, Arrays mit Index 1 zu beginnen (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 spärlich 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}} 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 table[“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”

Tabellen