Il tipo di dati della tabella può memorizzare più valori di qualsiasi tipo che non è , tra cui booleans , numeri , stringhe , funzioni e altre tabelle.Costruisci tabelle con braccetti ricci ( {} ):
-- Costruisci un tavolo vuoto assegnato alla variabile "t"local t = {}print(t) -- {}
Puoi utilizzare una tabella come array o dizionario.Gli array utilizzano un elenco ordinato di numeri come indici, ma i dizionari possono avere numeri, stringhe e oggetti come indici.
Per ulteriori informazioni sulle funzioni integrate per lavorare con le tabelle, vedi la libreria table.
Array
Un array è un elenco ordinato di valori.Gli array sono utili per archiviare raccolte di dati, come un gruppo di giocatori con permessi speciali.
Crea array
Per creare un array utilizzando una tabella Luau, dichiara i valori in ordine sequenziale, separati da virgoletta.
-- Costruisci un array con tre elementilocal testArray = {"A string", 3.14159, true}print(testArray)
Leggi da array
Per leggere da un array, aggiungi una coppia di parentesi quadrate dopo il suo riferimento e specifica il numero di indice dell'elemento all'interno di ( [pos] ):
-- Costruisci un array con tre elementilocal testArray = {"A string", 3.14159, true}print(testArray[1]) -- Una stringaprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
Scrivi negli array
Per definire o riscrivere il valore di un array a un indice, dichiara il numero dell'indice in parentesi quadrate ( [index] ) seguito da = e dal valore:
local testArray = {"A string", 3.14159, true}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Iterare sugli array
Per iterare su un array, puoi usare un ciclo for .Poiché gli array hanno indici numerici, puoi anche utilizzare un ciclo numerico for da 1 alla lunghezza dell'array ( #array ).
local testArray = {"A string", 3.14159, true, "New string"}-- Loop utilizzando l'iterazione generalefor index, value in testArray doprint(index, value)end-- Iterare utilizzando l'operatore di lunghezza dell'array (#)for index = 1, #testArray doprint(index, testArray[index])end
Inserisci oggetti
Ci sono due modi integrati per inserire un oggetto alla fine dell' array :
- Passa un riferimento all'array e al valore dell'elemento alla funzione Luau's table.insert() .
- Aggiungi il nuovo elemento all'array utilizzando la sintassi array[#array+1].
local testArray = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- Nuova stringaprint(testArray[4]) -- Another new string
Per inserire un oggetto tra l'inizio e la fine di un array, includi un valore di posizione come secondo argomento di table.insert() .Questo inserisce il nuovo elemento e sposta gli elementi seguenti di una posizione nell'indice.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- Primo elementoprint(testArray[2]) -- NUOVO ARTICOLO #2print(testArray[3]) -- Next item
Rimuovi oggetti
Per rimuovere un oggetto da un array, usa table.remove().Questo rimuove l'elemento alla posizione specificata e sposta tutti gli elementi successivi di un livello indietro.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- Primo elementoprint(testArray[2]) -- Last item
Dizionari
I dizionari sono un'estensione degli array. I dizionari memorizzano un insieme di coppie chiave-valore, in cui le chiavi possono essere qualsiasi numero, stringa o oggetto.
Crea dizionari
Per creare una tabella dizionario, definisci ciascuna chiave seguita da = e dal valore . Separa ogni coppia chiave-valore con una virgola:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}
Le chiavi per i dizionari possono essere numeri, stringhe e oggetti.Ad esempio, una chiave può anche essere un Instance .Per utilizzare gli oggetti come chiavi, dichiara la chiave tra parentesi quadrate ( [key] ):
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}
Leggi da dizionari
Per leggere da un dizionario, aggiungi una coppia di parentesi dopo il suo riferimento e specifica il nome della chiave.Fai riferimento direttamente a una chiave di stringa utilizzando ( ["key"] ) o ( .key ), o invece usa un valore variabile ( [key] ).
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}-- Includi citazioni per le chiavi di stringaprint(testDictionary["partType"]) -- Blocca-- Oppure usa . per indicizzare le chiavi delle stringhe senza spaziprint(testDictionary.partType) -- Blocca-- Omettere le virgolette per le chiavi non stringheprint(testDictionary[part]) -- true
Scrivi ai dizionari
Per definire o riscrivere il valore di una chiave di dizionario nuova o esistente, dichiara il nome della chiave tra parentesi ( [key] ) o, se la chiave è una stringa, usa ( .key ) seguito da = e il valore:
local testDictionary = {fruitName = "Lemon",sour = true}-- Cambia il valore delle chiavi esistentitestDictionary["fruitName"] = "Cherry"testDictionary.sour = false-- Inserisci una nuova coppia chiave-valoretestDictionary.fruitCount = 10print(testDictionary.fruitName) -- Ciliegiaprint(testDictionary.sour) -- fallitoprint(testDictionary.fruitCount) -- 10
Iterare su dizionari
Per iterare su un dizionario, usa un ciclo for :
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}for key, value in testDictionary doprint(key, value)end--[[ Output risultante:fruitName Lemonsour truefruitColor Yellow]]
Rimuovi coppie chiave-valore
Per rimuovere o cancellare una coppia chiave-valore da un dizionario, imposta il suo valore per una chiave a nil .
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ Output risultante:fruitName LemonfruitColor Yellow]]
Tabelle come riferimenti
Se memorizzi una tabella in una nuova variabile, Luau non crea una copia di quella tabella.Invece, la variabile diventa un riferimento o puntatore, alla tabella originale.Qualsiasi riferimento a una tabella riflette qualsiasi modifica alla tabella originale:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- Cambia i valori nell'array originaleoriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ Output risultante:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Clone tabelle
Cloni superficiali
Per copiare una tabella senza tabelle annidate, Luau offre il metodo table.clone() .
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Clone profonde
Per copiare una tabella più complessa con tabelle annidate al suo interno, dovrai usare una funzione ricorsiva simile alla seguente:
-- La funzione utilizzata per il clonaggio profondo di una tabella
local function deepClone(original)
-- Definisci la nuova tabella per la copia
local clone = table.clone(original)
-- Loop attraverso la tabella originale per controllare i valori della tabella
-- Se una tabella viene trovata come valore, clonala profondamente alla chiave (indice)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Restituisci la copia finale del tavolo clonato profondo
return clone
end
Con la funzione in loco, puoi fare una copia profonda come segue:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Tavoli di congelamento
Congelare un tavolo lo rende read-only, che è utile per creare valori costanti che non vuoi cambiare.Il congelamento è permanente; non esiste alcun metodo "unfreeze" o "thaw".Per controllare se un tavolo è congelato, usa table.isfrozen() .
Congelamenti superficiali
Per congelare una tabella senza tabelle annidate, Luau offre il metodo table.freeze().
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> attempt to modify a readonly table
Congelamenti profondi
Per congelare una tabella più complessa con tabelle annidate al suo interno, usa una funzione ricorsiva simile alla seguente:
local function deepFreeze(target)
-- Congelamento superficiale del tavolo
table.freeze(target)
-- Controlla ogni chiave della tabella e congelala se è una tabella
for _, value in target do
-- Assicurati che il valore non sia congelato; se lo è già, si verificherà un errore
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(v)
end
end
end
Con la funzione in loco, puoi congelare a fondo un tavolo come segue:
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