Il tipo di dato tabella può memorizzare più valori di qualsiasi tipo che non sia nil, inclusi booleans, numeri, stringhe, funzioni, e altre tabelle. Costruisci tabelle con parentesi graffe ({}):
-- Costruisci una tabella vuota assegnata alla variabile "t"local t = {}print(t) -- {}
Puoi usare una tabella come array o dizionario. Gli array usano un elenco ordinato di numeri come indici, ma i dizionari possono avere numeri, stringhe e oggetti come indici.
Per ulteriori informazioni sulle funzioni incorporate per lavorare con le tabelle, consulta la libreria table.
Array
Un array è un elenco ordinato di valori. Gli array sono utili per memorizzare collezioni di dati, come un gruppo di giocatori con permessi speciali.
Crea array
Per creare un array usando una tabella Luau, dichiara i valori in ordine sequenziale, separati da virgole.
-- Costruisci un array con tre elementilocal testArray = {"Una stringa", 3.14159, true}print(testArray)
Leggi dagli array
Per leggere da un array, aggiungi una coppia di parentesi quadre dopo la sua referenza e specifica il numero dell'indice dell'elemento all'interno ([pos]):
-- Costruisci un array con tre elementilocal testArray = {"Una stringa", 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 tra parentesi quadre ([index]) seguito da = e dal valore:
local testArray = {"Una stringa", 3.14159, true}testArray[2] = 12345testArray[4] = "Nuova stringa"print(testArray[2]) --12345print(testArray[4]) -- Nuova stringa
Itera sugli array
Per iterare su un array, puoi usare un ciclo for. Poiché gli array hanno indici numerici, puoi anche utilizzare un ciclo for numerico da 1 alla lunghezza dell'array (#array).
local testArray = {"Una stringa", 3.14159, true, "Nuova stringa"}-- Ciclo usando iterazione generalefor index, value in testArray doprint(index, value)end-- Itera usando l'operatore di lunghezza dell'array (#)for index = 1, #testArray doprint(index, testArray[index])end
Inserisci elementi
Ci sono due modi incorporati per inserire un elemento alla fine di un array:
- Passa un riferimento all'array e al valore dell'elemento alla funzione table.insert() di Luau.
- Aggiungi il nuovo elemento all'array usando la sintassi array[#array+1].
local testArray = {"Una stringa", 3.14159}table.insert(testArray, "Nuova stringa")testArray[#testArray+1] = "Un'altra nuova stringa"print(testArray[3]) -- Nuova stringaprint(testArray[4]) -- Un'altra nuova stringa
Per inserire un elemento 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 successivi di un indice verso l'alto.
local testArray = {"Primo elemento", "Prossimo elemento"}table.insert(testArray, 2, "ELEMENTO NUOVO #2")print(testArray[1]) -- Primo elementoprint(testArray[2]) -- ELEMENTO NUOVO #2print(testArray[3]) -- Prossimo elemento
Rimuovi elementi
Per rimuovere un elemento da un array, usa table.remove(). Questo rimuove l'elemento nella posizione specificata e sposta eventuali elementi successivi indietro di un indice.
local testArray = {"Primo elemento", "Prossimo elemento", "Ultimo elemento"}table.remove(testArray, 2)print(testArray[1]) -- Primo elementoprint(testArray[2]) -- Ultimo elemento
Dizionari
I dizionari sono un'estensione degli array. I dizionari memorizzano un insieme di coppie chiave-valore, dove le chiavi possono essere qualsiasi numero, stringa o oggetto.
Crea dizionari
Per creare una tabella dizionario, definisci ogni chiave seguita da = e dal valore. Separa ogni coppia chiave-valore con una virgola:
local testDictionary = {fruttaNome = "Limone",fruttaColore = "Giallo",aspro = true}
Le chiavi per i dizionari possono essere numeri, stringhe e oggetti. Ad esempio, una chiave può essere anche un Instance. Per usare oggetti come chiavi, dichiara la chiave tra parentesi quadre ([key]):
local parte = Instance.new("Part")local testDictionary = {tipoParte = "Blocca",[parte] = true}
Leggi dai 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 stringa usando either (["key"]) o (.key), o usa invece un valore variabile ([key]).
local parte = Instance.new("Part")local testDictionary = {tipoParte = "Blocca",[parte] = true}-- Includi virgolette per chiavi stringaprint(testDictionary["tipoParte"]) -- Blocca-- Oppure usa . per indicizzare le chiavi stringa senza spaziprint(testDictionary.tipoParte) -- Blocca-- Ometti le virgolette per chiavi non stringaprint(testDictionary[parte]) -- true
Scrivi nei dizionari
Per definire o riscrivere il valore di una chiave di dizionario esistente o nuova, dichiara il nome della chiave tra parentesi ([key]) o, se la chiave è una stringa, usa (.key) seguita da = e dal valore:
local testDictionary = {fruttaNome = "Limone",aspro = true}-- Cambia il valore delle chiavi esistentitestDictionary["fruttaNome"] = "Ciliegia"testDictionary.aspro = false-- Inserisci una nuova coppia chiave-valoretestDictionary.contaFrutta = 10print(testDictionary.fruttaNome) -- Ciliegiaprint(testDictionary.aspro) -- falseprint(testDictionary.contaFrutta) -- 10
Itera sui dizionari
Per iterare su un dizionario, usa un ciclo for:
local testDictionary = {fruttaNome = "Limone",fruttaColore = "Giallo",aspro = true}for key, value in testDictionary doprint(key, value)end--[[ Risultato dell'output:fruttaNome Limoneaspro truefruttaColore Giallo]]
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 = {fruttaNome = "Limone",fruttaColore = "Giallo",aspro = true}testDictionary.aspro = nilfor key, value in testDictionary doprint(key, value)end--[[ Risultato dell'output:fruttaNome LimonefruttaColore Giallo]]
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 eventuali modifiche alla tabella originale:
local arrayOriginale = {10, 20}local riferimentoArray = arrayOriginaleprint("Originale:", arrayOriginale[1], arrayOriginale[2])print("Riferimento:", riferimentoArray[1], riferimentoArray[2])-- Cambia i valori nell'array originalearrayOriginale[1] = 1000arrayOriginale[2] = 2000print("Riferimento:", riferimentoArray[1], riferimentoArray[2])--[[ Risultato dell'output:Originale: 10 20Riferimento: 10 20Riferimento: 1000 2000]]
Clona tabelle
Cloni superficiali
Per copiare una tabella senza nessuna tabella nidificata, Luau offre il metodo table.clone().
local originale = {chiave = "valore",motore = "Roblox",playerID = 505306092}local clone = table.clone(originale)
Cloni profondi
Per copiare una tabella più complessa con tabelle nidificate all'interno, dovrai usare una funzione ricorsiva simile alla seguente:
-- La funzione usata per clonare profondamente una tabella
local function deepClone(originale)
-- Definisci la nuova tabella per la copia
local clone = table.clone(originale)
-- Cicla attraverso la tabella originale per controllare i valori delle tabelle
-- Se viene trovata una tabella come valore, clonala a fondo nella chiave (indice)
for key, value in originale do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Restituisci la copia finale della tabella clonata a fondo
return clone
end
Con la funzione in atto, puoi fare una copia profonda come segue:
local originale = {chiave = "valore",informazioniGiocatore = {playerID = 505306092,nomeGiocatore = "NomeGiocatore"},altreInformazioni = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(originale)
Congela tabelle
Congelare una tabella la rende di sola lettura, il che è utile per creare valori costanti che non vuoi cambiare. Il congelamento è permanente; non esiste un metodo "decongelare" o "scongelare". Per controllare se una tabella è congelata, usa table.isfrozen().
Congelamenti superficiali
Per congelare una tabella senza tabelle nidificate, Luau offre il metodo table.freeze().
local target = {chiave = "valore",motore = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> tentativo di modificare una tabella di sola lettura
Congelamenti profondi
Per congelare una tabella più complessa con tabelle nidificate all'interno, usa una funzione ricorsiva simile alla seguente:
local function deepFreeze(target)
-- Congela superficialmente la tabella
table.freeze(target)
-- Controlla ogni chiave della tabella e congela 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(value)
end
end
end
Con la funzione in atto, puoi congelare profondamente una tabella come segue:
local target = {chiave = "valore",informazioniGiocatore = {playerID = 505306092,nomeGiocatore = "NomeGiocatore"},altreInformazioni = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.informazioniGiocatore.playerID = 1 --> tentativo di modificare una tabella di sola lettura