Het table gegevenstype kan meerdere waarden van elk type dat niet nil is opslaan, inclusief booleans, getallen, strings, functies en andere tabellen. Constructeer tabellen met accolades ({}):
-- Constructeer een lege tabel toegewezen aan variabele "t"
local t = {}
print(t) -- {}Je kunt een tabel gebruiken als een array of woordenboek. Arrays gebruiken een geordende lijst van getallen als indices, maar woordenboeken kunnen getallen, strings en objecten als indices hebben.
Voor meer informatie over ingebouwde functies voor het werken met tabellen, zie de table bibliotheek.
Arrays
Een array is een geordende lijst van waarden. Arrays zijn nuttig voor het opslaan van verzamelingen gegevens, zoals een groep spelers met speciale rechten.
Arrays maken
Om een array te maken met een Luau-tabel, declareer je de waarden in volgorde, gescheiden door komma's.
-- Constructeer een array met drie items
local testArray = {"Een string", 3.14159, true}
print(testArray)Lezen uit arrays
Om uit een array te lezen, voeg je een paar vierkante haken toe na de referentie en geef je het indexnummer van het element binnenin op ([pos]):
-- Constructeer een array met drie items
local testArray = {"Een string", 3.14159, true}
print(testArray[1]) -- Een string
print(testArray[2]) -- 3.14159
print(testArray[3]) -- trueSchrijven naar arrays
Om de waarde van een array op een index te definiëren of te herschrijven, declareer je het indexnummer in vierkante haken ([index]) gevolgd door = en de waarde:
local testArray = {"Een string", 3.14159, true}
testArray[2] = 12345
testArray[4] = "Nieuwe string"
print(testArray[2]) -- 12345
print(testArray[4]) -- Nieuwe stringItereren over arrays
Om over een array te itereren, kun je een for-lus gebruiken. Omdat de arrays numerieke indices hebben, kun je ook een numerieke for-lus gebruiken van 1 tot de lengte van de array (#array).
local testArray = {"Een string", 3.14159, true, "Nieuwe string"}
-- Loop met algemene iteratie
for index, value in testArray do
print(index, value)
end
-- Itereren met de array lengte operator (#)
for index = 1, #testArray do
print(index, testArray[index])
endItems invoegen
Er zijn twee ingebouwde manieren om een item aan het einde van een array toe te voegen:
- Geef een referentie naar de array en de itemwaarde door aan Luau's table.insert() functie.
- Voeg het nieuwe item toe aan de array met de array[#array+1] syntaxis.
local testArray = {"Een string", 3.14159}
table.insert(testArray, "Nieuwe string")
testArray[#testArray+1] = "Nog een nieuwe string"
print(testArray[3]) -- Nieuwe string
print(testArray[4]) -- Nog een nieuwe stringOm een item tussen het begin en het einde van een array in te voegen, geef je een positie waarde op als het tweede argument van table.insert(). Dit voegt het nieuwe item in en duwt de volgende items één indexpositie omhoog.
local testArray = {"Eerste item", "Volgend item"}
table.insert(testArray, 2, "NIEUW ITEM #2")
print(testArray[1]) -- Eerste item
print(testArray[2]) -- NIEUW ITEM #2
print(testArray[3]) -- Volgend itemItems verwijderen
Om een item uit een array te verwijderen, gebruik je table.remove(). Dit verwijdert het item op de opgegeven positie en verplaatst eventuele volgende items één indexpositie terug.
local testArray = {"Eerste item", "Volgend item", "Laatste item"}
table.remove(testArray, 2)
print(testArray[1]) -- Eerste item
print(testArray[2]) -- Laatste itemWoordenboeken
Woordenboeken zijn een uitbreiding van arrays. Woordenboeken slaan een set van sleutel-waarde paren op, waarbij de sleutels elk getal, string of object kunnen zijn.
Woordenboeken maken
Om een woordenboektabel te maken, definieer je elke sleutel gevolgd door = en de waarde. Scheid elk sleutel-waarde paar met een komma:
local testDictionary = {
fruitNaam = "Citroen",
fruitKleur = "Geel",
zure = true
}De sleutels voor woordenboeken kunnen getallen, strings en objecten zijn. Bijvoorbeeld, een sleutel kan ook een Instance zijn. Om objecten als sleutels te gebruiken, declareer je de sleutel in vierkante haken ([key]):
local part = Instance.new("Part")
local testDictionary = {
partType = "Blok",
[part] = true
}Lezen uit woordenboeken
Om uit een woordenboek te lezen, voeg je een paar haken toe na de referentie en geef je de sleutelnaam op. Verwijs direct naar een string sleutel met (["key"]) of (.key), of gebruik in plaats daarvan een variabele waarde ([key]).
local part = Instance.new("Part")
local testDictionary = {
partType = "Blok",
[part] = true
}
-- Voeg aanhalingstekens toe voor string sleutels
print(testDictionary["partType"]) -- Blok
-- Of gebruik . om string sleutels zonder spaties te indexeren
print(testDictionary.partType) -- Blok
-- Laat aanhalingstekens weg voor niet-string sleutels
print(testDictionary[part]) -- trueSchrijven naar woordenboeken
Om de waarde van een nieuwe of bestaande woordenboek sleutel te definiëren of te herschrijven, declareer je de sleutelnaam in haken ([key]) of, als de sleutel een string is, gebruik je (.key) gevolgd door = en de waarde:
local testDictionary = {
fruitNaam = "Citroen",
zure = true
}
-- Wijzig de waarde van bestaande sleutels
testDictionary["fruitNaam"] = "Kers"
testDictionary.zure = false
-- Voeg een nieuw sleutel-waarde paar toe
testDictionary.fruitAantal = 10
print(testDictionary.fruitNaam) -- Kers
print(testDictionary.zure) -- false
print(testDictionary.fruitAantal) -- 10Itereren over woordenboeken
Om over een woordenboek te itereren, gebruik je een for-lus:
local testDictionary = {
fruitNaam = "Citroen",
fruitKleur = "Geel",
zure = true
}
for key, value in testDictionary do
print(key, value)
end
--[[ Resultaat:
fruitNaam Citroen
zure true
fruitKleur Geel
]]Sleutel-waarde paren verwijderen
Om een sleutel-waarde paar uit een woordenboek te verwijderen of te wissen, stel je de waarde voor een sleutel in op nil.
local testDictionary = {
fruitNaam = "Citroen",
fruitKleur = "Geel",
zure = true
}
testDictionary.zure = nil
for key, value in testDictionary do
print(key, value)
end
--[[ Resultaat:
fruitNaam Citroen
fruitKleur Geel
]]Tabellen als referenties
Als je een tabel in een nieuwe variabele opslaat, maakt Luau geen kopie van die tabel. In plaats daarvan wordt de variabele een referentie, of pointer, naar de originele tabel. Elke referentie naar een tabel weerspiegelt eventuele wijzigingen in de originele tabel:
local origineleArray = {10, 20}
local arrayReferentie = origineleArray
print("Origineel:", origineleArray[1], origineleArray[2])
print("Referentie:", arrayReferentie[1], arrayReferentie[2])
-- Wijzig waarden in de originele array
origineleArray[1] = 1000
origineleArray[2] = 2000
print("Referentie:", arrayReferentie[1], arrayReferentie[2])
--[[ Resultaat:
Origineel: 10 20
Referentie: 10 20
Referentie: 1000 2000
]]Tabellen klonen
Shallow clones
Om een tabel te kopiëren zonder geneste tabellen, biedt Luau de table.clone() methode.
local origineel = {
sleutel = "waarde",
motor = "Roblox",
spelerID = 505306092
}
local kloon = table.clone(origineel)Deep clones
Om een complexere tabel met geneste tabellen erin te kopiëren, moet je een recursieve functie gebruiken die lijkt op de volgende:
-- De functie die wordt gebruikt voor het diep klonen van een tabel
local function deepClone(origineel)
-- Definieer de nieuwe tabel voor de kopie
local kloon = table.clone(origineel)
-- Loop door de originele tabel om te controleren op tabelwaarden
-- Als een tabel wordt gevonden als waarde, diep kloon deze naar de sleutel (index)
for key, value in origineel do
if type(value) == "table" then
kloon[key] = deepClone(value)
end
end
-- Geef de voltooide kopie van de diep gekloonde tabel terug
return kloon
endMet de functie op zijn plaats, kun je een diepe kopie maken als volgt:
local origineel = {
sleutel = "waarde",
spelerInfo = {
spelerID = 505306092,
spelerNaam = "SpelerNaam"
},
anderInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
local kloon = deepClone(origineel)Tabellen bevriezen
Het bevriezen van een tabel maakt deze alleen-lezen, wat nuttig is voor het creëren van constante waarden die je niet wilt wijzigen. Bevriezen is permanent; er is geen "debevriezen" of "ontdooien" methode. Om te controleren of een tabel bevroren is, gebruik je table.isfrozen().
Shallow freezes
Om een tabel te bevriezen zonder geneste tabellen, biedt Luau de table.freeze() methode.
local doel = {
sleutel = "waarde",
motor = "Roblox",
spelerID = 505306092
}
table.freeze(doel)
doel.spelerID = 1 --> poging om een alleen-lezen tabel te wijzigenDeep freezes
Om een complexere tabel met geneste tabellen erin te bevriezen, gebruik je een recursieve functie die lijkt op de volgende:
local function deepFreeze(doel)
-- Shallow freeze de tabel
table.freeze(doel)
-- Controleer elke sleutel van de tabel en bevries deze als het een tabel is
for _, value in doel do
-- Zorg ervoor dat de waarde niet bevroren is; als dat al zo is, zal er een fout optreden
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
endMet de functie op zijn plaats, kun je een tabel diep bevriezen als volgt:
local doel = {
sleutel = "waarde",
spelerInfo = {
spelerID = 505306092,
spelerNaam = "SpelerNaam"
},
anderInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(doel)
doel.spelerInfo.spelerID = 1 --> poging om een alleen-lezen tabel te wijzigen