Der Tabelle-Datentyp Datentyp kann mehrere Werte von jeder Art speichern, die nicht nil ist, einschließlich Booleane, 1> Zahlen1>, 4> Strings4>, 7> Funktionen7> und anderen Tabellen. Konstruieren Sie Tabellen mit kurzen Klammern ( 0> 0> ):
-- Baue einen leeren Tisch mit der Variable "t" auflocal t = {}print(t) -- {}
Du kannst eine Tabelle als Matrix oder Dictionary verwenden. Mat阵s verwenden eine aufgeliste von Zahlen als Indexe, aber Dictionaries können Zahlen, Zeichen und Objekte als Indexe haben.
For more information on built-in functions for working with tables, see the table library.
Matrix
Ein Array ist eine sortierte Liste von Werten. Arrays sind nützlich zum Speichern von Sammlungen von Daten, wie z. B. eine Gruppe von Spielern mit besonderen Berechtigungen.
Arrays erstellen
Um ein Array mit einer Luau-Tabelle zu erstellen, deklarieren Sie die Werte in sequenzieller Reihenfolge, die durch Kommas getrennt sind.
-- Baue ein Array mit drei Elementen auflocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray)
Lesen von Arrays
Um von einem Array zu lesen, fügen Sie ein Paar quadratischer Klammern nach seinem Verweis hinzu und geben Sie die Indexnummer des Elements innerhalb ( [pos] ):
-- Baue ein Array mit drei Elementen auflocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray[1]) -- Eine Stringprint(testArray[2]) -- 3.14159print(testArray[3]) -- Camera
Schreiben in Arrays
Um den Wert eines Arrays in einem Index zu definieren oder neu zu schreiben, geben Sie die Indexnummer in Klammern ( [index] ) und dann = und den Wert ein:
local testArray = {"A string", 3.14159, workspace.Camera}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Über Arrays Iterieren
Um über ein Array zu wiederholen, kannst du einen for-Loop verwenden. Da die Arrays numerische Indizes haben, kannst du auch einen numerischen for-Loop von 1 bis zur Länge des Arrays verwenden ( 2># array2> ).
local testArray = {"A string", 3.14159, workspace.Camera, "New string"}-- Loop mit generischer Wiederholungfor index, value in testArray doprint(index, value)end-- Iterate mit dem Array-Length-Operator (#)for index = 1, #testArray doprint(index, testArray[index])end--[[ Ergebnis:1 A string2 3.141593 Camera4 New string1 A string2 3.141593 Camera4 New string]]
Items einfügen
Es gibt zwei integrierte Möglichkeiten, einen Gegenstand in das Ende eines Arrays einzufügen:
- Geben Sie eine Verweis auf die Matrix und den Elementwert an Luau's table.insert() Funktion.
- Fügen Sie den neuen Gegenstand dem Array mit der Syntax array[#array+1] hinzu.
local testArray = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- Neue Stringprint(testArray[4]) -- Another new string
Um ein Element zwischen dem Start und dem Ende eines Arrays einzufügen, um einen Positionwert als zweiten Argument von table.insert() . Dies gibt das neue Element ein und schiebt die folgenden Elemente um eine Indexposition.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- Erster Artikelprint(testArray[2]) -- NEUE ITEM #2print(testArray[3]) -- Next item
Items entfernen
Um ein Element aus einer Arrayzu entfernen, verwenden Sie table.remove(). Dies entfernt das Element an der angegebenen Position und bewegt alle folgenden Elemente um eine Index-Position zurück.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- Erster Artikelprint(testArray[2]) -- Last item
Diktionen
Dictionaries sind eine Erweiterung von Arrays. Dictionaries speichern eine Reihe von Schlüsselwertenpaaren, bei denen die Schlüssel beliebiger Zahl, Stringoder Objekte sein können.
Wörterbücher erstellen
Um einen Wörterbuch-Tabelle zu erstellen, definieren Sie jeden Schlüssel , der von = und dem Wert folgt. Trennen Sie jedes Schlüssel-Wert-Paar mit einem Komma:
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}
Die Schlüssel für Diktionen können Zahlen, Strings und Objekte sein. Zum Beispiel kann ein Schlüssel auch ein Instance sein. Um Objekte als Schlüssel zu verwenden, deklarieren Sie den Schlüssel in Klammern ( [key] ):
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}
Lesen von Dictionaries
Um aus einem Wörterbuch zu lesen, fügen Sie ein Paar von Klammern nach seinem Verweis hinzu und geben Sie den Schlüsselnamen an. Verweisen Sie direkt auf einen String-Key mit Quellen ( ["key"] ) oder verwenden Sie einen Variablenwert ( [key] ).
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}-- Enthalten Sie Anführungszeichen für Stringschlüsselprint(testDictionary["PartType"]) -- Blockieren-- Zitaten für nicht-string-Schlüssel auslassenprint(testDictionary[part]) -- true
Schreiben in Dictionaries
Um den Wert eines neuen oder bestehenden Dictionaries-Schlüssels zu definieren oder neu zu schreiben, geben Sie den Schlüsselnamen in Klammern ( [key] ) und folgen Sie von = und dem Wert:
local testDictionary = {FruitName = "Lemon",Sour = true}-- Wert eines bestehenden Schlüssels änderntestDictionary["FruitName"] = "Cherry"testDictionary["Sour"] = false-- Neues Schlüssel-Wert-Paar einfügentestDictionary["FruitCount"] = 10print(testDictionary["FruitName"]) -- Kirscheprint(testDictionary["Sour"]) -- falschprint(testDictionary["FruitCount"]) -- 10
Über Dictionaries wiederholen
Um über ein Wörterbuch zu wiederholen, verwenden Sie die globale Funktion pairs() in einem for -Loop:
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}for key, value in pairs(testDictionary) doprint(key, value)end--[[ Ergebnis:FruitName LemonSour trueFruitColor Yellow]]
Entfernen von Schlüsselwertpaaren
Um ein Schlüssel-Wert-Paar aus einem Wörterbuch zu entfernen oder zu löschen, setzen Sie seinen Wert für einen Schlüssel auf nil .
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}testDictionary["Sour"] = nilfor key, value in pairs(testDictionary) doprint(key, value)end--[[ Ergebnis:FruitName LemonFruitColor Yellow]]
Tabellen als Referenzen
Wenn Sie eine Tabelle in einer neuen Variable speichern, erstellt Luau keine Kopie dieser Tabelle. Stattdessen wird die Variable zu einer Referenz oder einem Zeiger für die ursprüngliche Tabelle. Jede Verweisung auf eine Tabelle spiegelt alle Änderungen an der ursprünglichen Tabelle:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- Ändere Werte in der ursprünglichen ArrayoriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ Ergebnis:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Tabellen klonen
Klone in der Tiefe
Um einen Tabelle ohne irgendwelche verwandten Tabellen zu kopieren, bietet Luau die Methode table.clone() an.
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Tiefe Klone
Um einen komplexeren Tabelle mit verschachtelten Tabellen innerhalb zu kopieren, musst du eine recursive Funktion verwenden, die gefolgte Profileähnelt:
-- Die Funktion, die verwendet wird, um einen Tisch tief zu kopieren
local function deepCopy(original)
-- Definieren Sie die neue Tabelle für die Kopie
local copy = {}
-- Loop durch die ursprüngliche Tabelle, um zu klonen
for key, value in original do
-- Wenn die Art des Wertes eine Tabelle ist, kopiere sie tief in den Schlüssel (Index)
-- Andernfalls (oder) ist der Typ keine Tabelle, weise den Standardwert dem Index zu
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Kehre die finalisierte Kopie der tiefen klonierten Tabelle zurück
return copy
end
Mit der Funktion in der Ortkannst du eine Tiefe Kopie wie folgt erstellen:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepCopy(original)
Frostige Tabelle
Das Einfrieren eines Tabellen macht es lesbar, was nützlich ist, um konstante Werte zu erstellen, die Sie nicht ändern möchten. Das Einfrieren ist dauerhaft; es gibt keine "Entfrier" oder "Schmelzen"-Methode. Um zu überprüfen, ob eine Tabelle eingefroren ist, verwenden Sie table.isfrozen() .
Schalles Gefrieren
Um einen Tisch ohne irgendwelche verwurzelten Tabellen zu frieren, bietet Luau die Methode table.freeze() an.
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> attempt to modify a readonly table
Tiefkühl-Einschlag
Um einen komplexeren Tabelle mit verschachtelten Tabellen innerhalb zu frieren, verwenden Sie eine recursive Funktion, die dem gefolgte Profileähnelt:
local function deepFreeze(target)
-- Tabelle leicht einfrieren
table.freeze(target)
-- Überprüfen Sie jeden Schlüssel der Tabelle und frieren Sie ihn, wenn es eine Tabelle ist
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end
Mit der Funktion in der Ortkönnen Sie einen Tabelle wie folgt tief einfrieren:
local target = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> attempt to modify a readonly table