Der Tabellen-Datentyp kann mehrere Werte eines beliebigen Typs speichern, der nicht nil ist, einschließlich Booleans, Zahlen, Strings, Funktionen und anderer Tabellen. Konstruiere Tabellen mit geschweiften Klammern ({}):
-- Konstruiere eine leere Tabelle, die der Variablen "t" zugewiesen wirdlocal t = {}print(t) -- {}
Du kannst eine Tabelle als Array oder Wörterbuch verwenden. Arrays verwenden eine geordnete Liste von Zahlen als Indizes, während Wörterbücher Zahlen, Strings und Objekte als Indizes haben können.
Für weitere Informationen zu integrierten Funktionen zur Arbeit mit Tabellen siehe die table-Bibliothek.
Arrays
Ein Array ist eine geordnete Liste von Werten. Arrays sind nützlich zum Speichern von Datensammlungen, wie z. B. einer Gruppe von Spielern mit besonderen Berechtigungen.
Arrays erstellen
Um ein Array zu erstellen, das eine Luau-Tabelle verwendet, deklariere die Werte in aufeinanderfolgender Reihenfolge, durch Kommas getrennt.
-- Konstruiere ein Array mit drei Elementenlocal testArray = {"Ein String", 3.14159, true}print(testArray)
Aus Arrays lesen
Um aus einem Array zu lesen, füge ein Paar eckiger Klammern nach seiner Referenz hinzu und gib die Indexnummer des Elements innerhalb an ([pos]):
-- Konstruiere ein Array mit drei Elementenlocal testArray = {"Ein String", 3.14159, true}print(testArray[1]) -- Ein Stringprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
In Arrays schreiben
Um den Wert eines Arrays an einem Index zu definieren oder zu überschreiben, deklariere die Indexnummer in eckigen Klammern ([index]), gefolgt von = und dem Wert:
local testArray = {"Ein String", 3.14159, true}testArray[2] = 12345testArray[4] = "Neuer String"print(testArray[2]) -- 12345print(testArray[4]) -- Neuer String
Über Arrays iterieren
Um über ein Array zu iterieren, kannst du eine for-Schleife verwenden. Da die Arrays numerische Indizes haben, kannst du auch eine numerische for-Schleife von 1 bis zur Länge des Arrays (#array) verwenden.
local testArray = {"Ein String", 3.14159, true, "Neuer String"}-- Schleife mit allgemeiner Iterationfor index, value in testArray doprint(index, value)end-- Iteriere unter Verwendung des Array-Längenoperators (#)for index = 1, #testArray doprint(index, testArray[index])end
Elemente einfügen
Es gibt zwei integrierte Möglichkeiten, ein Element am Ende eines Arrays einzufügen:
- Übergebe eine Referenz auf das Array und den Elementwert an die Luau-Funktion table.insert().
- Füge das neue Element zum Array unter Verwendung der Syntax array[#array+1] hinzu.
local testArray = {"Ein String", 3.14159}table.insert(testArray, "Neuer String")testArray[#testArray+1] = "Ein weiterer neuer String"print(testArray[3]) -- Neuer Stringprint(testArray[4]) -- Ein weiterer neuer String
Um ein Element zwischen dem Anfang und Ende eines Arrays einzufügen, füge einen Positionswert als zweiten Parameter von table.insert() hinzu. Dadurch wird das neue Element eingefügt und die nachfolgenden Elemente um eine Indexposition verschoben.
local testArray = {"Erstes Element", "Nächstes Element"}table.insert(testArray, 2, "NEUES ELEMENT #2")print(testArray[1]) -- Erstes Elementprint(testArray[2]) -- NEUES ELEMENT #2print(testArray[3]) -- Nächstes Element
Elemente entfernen
Um ein Element aus einem Array zu entfernen, verwende table.remove(). Dadurch wird das Element an der angegebenen Position entfernt und alle folgenden Elemente werden um eine Indexposition nach hinten verschoben.
local testArray = {"Erstes Element", "Nächstes Element", "Letztes Element"}table.remove(testArray, 2)print(testArray[1]) -- Erstes Elementprint(testArray[2]) -- Letztes Element
Wörterbücher
Wörterbücher sind eine Erweiterung von Arrays. Wörterbücher speichern eine Menge von Schlüssel-Wert-Paaren, wobei die Schlüssel jede Zahl, jeden String oder jedes Objekt sein können.
Wörterbücher erstellen
Um eine Wörterbuch-Tabelle zu erstellen, definiere jeden Schlüssel gefolgt von = und dem Wert. Trenne jedes Schlüssel-Wert-Paar mit einem Komma:
local testDictionary = {obstName = "Zitrone",obstFarbe = "Gelb",sauer = true}
Die Schlüssel für Wörterbücher können Zahlen, Strings und Objekte sein. Zum Beispiel kann ein Schlüssel auch eine Instance sein. Um Objekte als Schlüssel zu verwenden, deklariere den Schlüssel in eckigen Klammern ([key]):
local part = Instance.new("Part")local testDictionary = {partTyp = "Block",[part] = true}
Aus Wörterbüchern lesen
Um aus einem Wörterbuch zu lesen, füge ein Paar Klammern nach seiner Referenz hinzu und gib den Schlüsselnamen an. Greife direkt auf einen String-Schlüssel zu, indem du entweder (["key"]) oder (.key) verwendest oder stattdessen einen Variablenwert ([key]) verwendest.
local part = Instance.new("Part")local testDictionary = {partTyp = "Block",[part] = true}-- Füge Anführungszeichen für String-Schlüssel hinzuprint(testDictionary["partTyp"]) -- Block-- Oder verwende . um String-Schlüssel ohne Leerzeichen zu indizierenprint(testDictionary.partTyp) -- Block-- Lass Anführungszeichen für nicht-String-Schlüssel wegprint(testDictionary[part]) -- true
In Wörterbüchern schreiben
Um den Wert eines neuen oder bestehenden Wörterbuchschlüssels zu definieren oder zu überschreiben, deklariere den Schlüsselnamen in Klammern ([key]) oder, wenn der Schlüssel ein String ist, verwende (.key) gefolgt von = und dem Wert:
local testDictionary = {obstName = "Zitrone",sauer = true}-- Ändere den Wert bestehender SchlüsseltestDictionary["obstName"] = "Kirsche"testDictionary.sauer = false-- Füge ein neues Schlüssel-Wert-Paar hinzutestDictionary.obstAnzahl = 10print(testDictionary.obstName) -- Kirscheprint(testDictionary.sauer) -- falseprint(testDictionary.obstAnzahl) -- 10
Über Wörterbücher iterieren
Um über ein Wörterbuch zu iterieren, verwende eine for-Schleife:
local testDictionary = {obstName = "Zitrone",obstFarbe = "Gelb",sauer = true}for key, value in testDictionary doprint(key, value)end--[[ Ergebnis:obstName Zitronesauer trueobstFarbe Gelb]]
Schlüssel-Wert-Paare entfernen
Um ein Schlüssel-Wert-Paar aus einem Wörterbuch zu entfernen oder zu löschen, setze seinen Wert für einen Schlüssel auf nil.
local testDictionary = {obstName = "Zitrone",obstFarbe = "Gelb",sauer = true}testDictionary.sauer = nilfor key, value in testDictionary doprint(key, value)end--[[ Ergebnis:obstName ZitroneobstFarbe Gelb]]
Tabellen als Referenzen
Wenn du eine Tabelle in einer neuen Variablen speicherst, erstellt Luau keine Kopie dieser Tabelle. Stattdessen wird die Variable zu einem Verweis oder Pointer auf die Originaltabelle. Jeder Verweis auf eine Tabelle spiegelt alle Änderungen an der Originaltabelle wider:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Verweis:", arrayReference[1], arrayReference[2])-- Werte im Original-Array ändernoriginalArray[1] = 1000originalArray[2] = 2000print("Verweis:", arrayReference[1], arrayReference[2])--[[ Ergebnis:Original: 10 20Verweis: 10 20Verweis: 1000 2000]]
Tabellen klonen
Flache Klone
Um eine Tabelle ohne geschachtelte Tabellen zu kopieren, bietet Luau die Methode table.clone() an.
local original = {schlüssel = "wert",maschine = "Roblox",spielerID = 505306092}local clone = table.clone(original)
Tiefe Klone
Um eine komplexere Tabelle mit darin geschachtelten Tabellen zu kopieren, musst du eine rekursive Funktion verwenden, die ähnlich ist wie die folgende:
-- Die Funktion, die zum tiefen Klonen einer Tabelle verwendet wird
local function deepClone(original)
-- Definiere die neue Tabelle für die Kopie
local clone = table.clone(original)
-- Durchlaufe die Originaltabelle, um nach Tabellenwerten zu suchen
-- Wenn eine Tabelle als Wert gefunden wird, klone sie tief zum Schlüssel (Index)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Gib die endgültige Kopie der tief geklonten Tabelle zurück
return clone
end
Mit der Funktion kannst du dann einen tiefen Klon wie folgt erstellen:
local original = {schlüssel = "wert",spielerInfo = {spielerID = 505306092,spielerName = "SpielerName"},weitereInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Tabellen einfrieren
Das Einfrieren einer Tabelle macht sie schreibgeschützt, was nützlich ist, um konstante Werte zu erstellen, die du nicht ändern möchtest. Das Einfrieren ist dauerhaft; es gibt keine "auftauen"- oder "entsperren"-Methode. Um zu überprüfen, ob eine Tabelle eingefroren ist, verwende table.isfrozen().
Flache Einfrierungen
Um eine Tabelle ohne geschachtelte Tabellen einzufrieren, bietet Luau die Methode table.freeze() an.
local target = {schlüssel = "wert",maschine = "Roblox",spielerID = 505306092}table.freeze(target)target.spielerID = 1 --> Versuch, eine schreibgeschützte Tabelle zu ändern
Tiefe Einfrierungen
Um eine komplexere Tabelle mit darin geschachtelten Tabellen einzufrieren, verwende eine rekursive Funktion ähnlich der folgenden:
local function deepFreeze(target)
-- Flach einfrieren der Tabelle
table.freeze(target)
-- Überprüfe jeden Schlüssel der Tabelle und friere ihn ein, wenn es eine Tabelle ist
for _, value in target do
-- Stelle sicher, dass der Wert nicht eingefroren ist; wenn er bereits eingefroren ist, tritt ein Fehler auf
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end
Mit der Funktion kannst du eine Tabelle dann tief einfrieren wie folgt:
local target = {schlüssel = "wert",spielerInfo = {spielerID = 505306092,spielerName = "SpielerName"},weitereInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.spielerInfo.spielerID = 1 --> Versuch, eine schreibgeschützte Tabelle zu ändern