Tabellen

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

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" auf
local 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 auf
local 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 auf
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- Eine String
print(testArray[2]) -- 3.14159
print(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] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(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 Wiederholung
for index, value in testArray do
print(index, value)
end
-- Iterate mit dem Array-Length-Operator (#)
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ Ergebnis:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 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 String
print(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 Artikel
print(testArray[2]) -- NEUE ITEM #2
print(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 Artikel
print(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üssel
print(testDictionary["PartType"]) -- Blockieren
-- Zitaten für nicht-string-Schlüssel auslassen
print(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 ändern
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- Neues Schlüssel-Wert-Paar einfügen
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- Kirsche
print(testDictionary["Sour"]) -- falsch
print(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) do
print(key, value)
end
--[[ Ergebnis:
FruitName Lemon
Sour true
FruitColor 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"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Ergebnis:
FruitName Lemon
FruitColor 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 = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Ändere Werte in der ursprünglichen Array
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Ergebnis:
Original: 10 20
Reference: 10 20
Reference: 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