Tabellen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Der Tabelle Daten тип kann mehrere Werte jeglicher Art speichern, die nicht nil ist, einschließlich Booleans , Zahlen , Zeichen , Funktionen und anderer Tabellen.Konstruiere Tabellen mit gekrümmten Klammern ( {} ):


-- Baue einen leeren Tisch auf, der der Variable "t" zugewiesen ist
local t = {}
print(t) -- {}

Du kannst eine Tabelle als Array oder Diktionär verwenden.Arrays verwenden eine geordnete Liste von Zahlen als Indizes, aber Wörterbücher können Zahlen, Zeichen und Objekte als Indizes haben.

Für weitere Informationen über integrierte Funktionen für die Arbeit mit Tabellen siehe die table Bibliothek.

Arrays

Ein Array ist eine geordnete Liste von Werten.Arrays sind nützlich zum Speichern von Sammlungen von Daten, wie einer Gruppe von Spielern mit besonderen Berechtigungen.

Arrays erstellen

Um ein Array mit einem Luau-Tab zu erstellen, deklariere die Werte in sequentieller Reihenfolge, getrennt durch Kommas.


-- Baue ein Array mit drei Elementen auf
local testArray = {"A string", 3.14159, true}
print(testArray)

Aus Arrays lesen

Um aus einem Array zu lesen, füge ein Paar quadratischer Klammern nach seiner Referenz hinzu und gib die Indexnummer des Elements innerhalb an ( [pos] ):


-- Baue ein Array mit drei Elementen auf
local testArray = {"A string", 3.14159, true}
print(testArray[1]) -- Eine String
print(testArray[2]) -- 3.14159
print(testArray[3]) -- true

Schreiben in Arrays

Um den Wert eines Arrays bei einem Index zu definieren oder neu zu schreiben, erkläre die Indexnummer in quadratischen Klammern ( [index] ) gefolgt von = und dem Wert:


local testArray = {"A string", 3.14159, true}
testArray[2] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(testArray[4]) -- New 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 verwenden (#array).


local testArray = {"A string", 3.14159, true, "New string"}
-- Schleife mit allgemeiner Iteration verwenden
for index, value in testArray do
print(index, value)
end
-- Iterieren mit dem Array-Länge-Operator (#)
for index = 1, #testArray do
print(index, testArray[index])
end

Artikel einfügen

Es gibt zwei integrierte Möglichkeiten, ein Element in das Ende eines Arrays einzufügen:

  • Geben Sie eine Referenz auf das Array und den Artikelwert an die Luau-Funktion table.insert() weiter.
  • Füge das neue Element zum Array mit der array[#array+1]-Syntax hinzu.

local testArray = {"A string", 3.14159}
table.insert(testArray, "New string")
testArray[#testArray+1] = "Another new string"
print(testArray[3]) -- Neue String
print(testArray[4]) -- Another new string

Um ein Element zwischen dem Anfang und dem Ende eines Arrays einzufügen, füge einen Positionswert als zweites Argument von table.insert() hinzu.Dies fügt den neuen Artikel ein und schiebt die folgenden Artikel um eine Indexposition nach oben.


local testArray = {"First item", "Next item"}
table.insert(testArray, 2, "NEW ITEM #2")
print(testArray[1]) -- Erster Artikel
print(testArray[2]) -- NEUES ARTIKEL #2
print(testArray[3]) -- Next item

Artikel entfernen

Um ein Element aus einem Array zu entfernen, verwende table.remove().Dies entfernt den Artikel an der angegebenen Position und bewegt alle nachfolgenden Elemente um eine Indexposition zurück.


local testArray = {"First item", "Next item", "Last item"}
table.remove(testArray, 2)
print(testArray[1]) -- Erster Artikel
print(testArray[2]) -- Last item

Wörterräume

Wörterbücher sind eine Erweiterung von Arrays. Wörterbücher speichern eine Reihe von Schlüssel-Wert-Paaren, bei denen die Schlüssel eine beliebige Zahl, Stringoder Objekt sein können.

Wörterbücher erstellen

Um einen Wörterbuch-Tabelle zu erstellen, definieren Sie jeden Schlüssel gefolgt von = und dem Wert . Trennen Sie jedes Schlüssel-Wert-Paar mit einem Komma:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}

Die Schlüssel für Wörterbücher können Zahlen, Zeichenketten und Objekte sein.Zum Beispiel kann ein Schlüssel auch ein Instance sein.Um Objekte als Schlüssel zu verwenden, erkläre den Schlüssel in quadratischen Klammern ( [key] ):


local part = Instance.new("Part")
local testDictionary = {
partType = "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.Verweise direkt auf einen Zeichenstring mit Zitaten ( ["key"] ) oder verwende einen Variablenwert ( [key] ).


local part = Instance.new("Part")
local testDictionary = {
partType = "Block",
[part] = true
}
-- Beinhalte Zitate für Zeichenschlüssel
print(testDictionary["partType"]) -- Blockieren
-- Zitate für nicht-string-Schlüssel überspringen
print(testDictionary[part]) -- true

In Wörterbücher schreiben

Um den Wert eines neuen oder bestehenden Wörterbuchschlüssels zu definieren oder neu zu schreiben, gib den Schlüsselnamen in Klammern ( [key] ) an, gefolgt von = und dem Wert:


local testDictionary = {
fruitName = "Lemon",
sour = true
}
-- Wert von bestehenden Schlüsseln ändern
testDictionary["fruitName"] = "Cherry"
testDictionary["sour"] = false
-- Füge ein neues Schlüssel-Wert-Paar ein
testDictionary["fruitCount"] = 10
print(testDictionary["fruitName"]) -- Kirsche
print(testDictionary["sour"]) -- falsch
print(testDictionary["fruitCount"]) -- 10

Über Wörterbücher iterieren

Um über ein Wörterbuch zu iterieren, verwende die globale pairs()-Funktion in einem for-Loop:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Ausgabe:
fruitName Lemon
sour true
fruitColor Yellow
]]

Schlüssel-Wert-Paare entfernen

Um ein Schlüssel-Wert-Paar aus einem Wörterbuch zu entfernen oder zu löschen, lege seinen Wert für einen Schlüssel auf nil fest.


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
testDictionary["sour"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Ausgabe:
fruitName Lemon
fruitColor Yellow
]]

Tabellen als Referenzen

Wenn du einen Tisch in einer neuen Variable speicherst, erstellt Luau keine Kopie dieses Tisches.Stattdessen wird die Variable zu einer Referenz oder einem Zeiger auf die ursprüngliche Tabelle.Jede Referenz auf eine Tabelle spiegelt alle Änderungen an der ursprünglichen Tabelle wider:


local originalArray = {10, 20}
local arrayReference = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Ändere Werte im ursprünglichen Array
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Ausgabe:
Original: 10 20
Reference: 10 20
Reference: 1000 2000
]]

Tabellen klonen

Flache Klone

Um eine Tabelle ohne verschachtelte Tabellen zu kopieren, bietet Luau die table.clone()-Methode an.


local original = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
local clone = table.clone(original)

Tiefe Klone

Um einen komplexeren Tisch mit verschachtelten Tabellen darin zu kopieren, musst du eine rekursive Funktion verwenden, die ähnlich ist wie die gefolgte Profile:


-- Die Funktion, die für das tiefe Kopieren einer Tabelle verwendet wird
local function deepCopy(original)
-- Definieren Sie die neue Tabelle für die Kopie
local copy = {}
-- Schleife durch den ursprünglichen Tabelle, um zu klonen
for key, value in original do
-- Wenn der Typ des Werts eine Tabelle ist, kopiere ihn tief in den Schlüssel (Index)
-- Sonst (oder) ist der Typ keine Tabelle, weise den Standardwert dem Index zu
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Gib die abgeschlossene Kopie der tief geklonten Tabelle zurück
return copy
end

Mit der Funktion vor Ort kannst 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)

Tabellen einfrieren

Das Einfrieren eines Tisches macht ihn lesbar, was nützlich ist, um konstante Werte zu erstellen, die du nicht ändern möchtest.Einfrieren ist permanent; es gibt keine Methode "auftauen" oder "auftauen" .Um zu überprüfen, ob eine Tabelle eingefroren ist, verwende table.isfrozen().

Tiefgefrieren

Um einen Tisch ohne verschachtelte Tabellen einzufrieren, bietet Luau die table.freeze()-Methode an.


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> attempt to modify a readonly table

Tiefe Gefrierungen

Um einen komplexeren Tabelle mit verschachtelten Tabellen darin einzufrieren, verwende eine rekursive Funktion ähnlich der gefolgte Profile:


local function deepFreeze(target)
-- Tiefe Einfrierung des Tisches
table.freeze(target)
-- Überprüfe jeden Schlüssel der Tabelle und friere ihn ein, wenn es sich um eine Tabelle handelt
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end

Mit der Funktion vor Ort kannst du 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