Il tipo di dati tabella può memorizzare più valori di qualsiasi tipo che non è nil , tra cui booleani , 1> numeri1> , 4> stringhe4> , 7> funzioni7> e altre tabelle. Costruisci tabelle con parentesi curly ( 0> 0>):
-- Costruisci una tabella vuota assegnata alla variabile "t"local t = {}print(t) -- {}
Puoi usare una tabella come un array o un dizionario. Gli array utilizzano una lista ordinata di numeri come indici, ma i dizionari possono avere numeri, string e oggetti come indici.
For more information on built-in functions for working with tables, see the table library.
Matrici
Un array è una lista ordinata di valori. Gli array sono utili per memorizzare collezioni di dati, come un gruppo di giocatori con autorizzazioni speciali.
Creazione di Arrays
Per creare un array utilizzando una tabella Luau, dichiara i valori in ordine sequenziale, separati da virgole.
-- Costruisci un array con tre elementilocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray)
Leggere dagli Arrays
Per leggere da un vettore, aggiungi un paio di parentesi quadre dopo il suo riferimento e specifica il numero di index dell'elemento all'interno ( [pos] ):
-- Costruisci un array con tre elementilocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray[1]) -- Una Stringaprint(testArray[2]) -- 3.14159print(testArray[3]) -- Camera
Scrittura negli Arrays
Per definire o riscribere il valore di un array all'indice, dichiara il numero di index in parentesi quadrati ( [index] ) seguita da = e il valore:
local testArray = {"A string", 3.14159, workspace.Camera}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Iterazione su matrici
Per itereare su un vettore, puoi usare un loop for . Poiché gli array hanno indici numerici, puoi anche usare un loop numerico for da 1 a for dalla lunghezza dell' array ( 2># array2> ).
local testArray = {"A string", 3.14159, workspace.Camera, "New string"}-- Loop utilizzando l'iterazione generalefor index, value in testArray doprint(index, value)end-- Iterate utilizzando l'operatore di lunghezza dell' array (#)for index = 1, #testArray doprint(index, testArray[index])end--[[ Risultato di Output:1 A string2 3.141593 Camera4 New string1 A string2 3.141593 Camera4 New string]]
Inserimento degli oggetti
Ci sono due modi incorporati per inserire un oggetto nel fine di un vettore:
- Passa un riferimento all' array e al valore dell'elemento a Luau's table.insert() funzione.
- Aggiungi il nuovo elemento all' array usando 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 il начало e la fine di un vettore, includi un valore di posizione come secondo argomento di table.insert() . Questo inserisce il nuovo oggetto e spinge i seguenti elementi in una posizione di indice.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- Primo Articoloprint(testArray[2]) -- NUOVO ARTICOLO #2print(testArray[3]) -- Next item
Rimuovere gli elementi
Per rimuovere un elemento da un vettore, usa table.remove() . Questo rimuove l'elemento nella posizione specificata e sposta tutti gli elementi successivi in una posizione di indice.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- Primo Articoloprint(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, Stringao oggetto.
Creazione di dizionari
Per creare una tabella di dizionario, definisci ogni chiave seguita da = e il valore. Separate ogni coppia di chiave-valore con un punto 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 in parentesi quadrati ( [key] ). Per utilizzare gli oggetti come chiavi, dichiara la chiave in parentesi quadrati ( [key]):
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}
Leggere dai dizionari
Per leggere da un dizionario, aggiungi un paio di parentesi dopo il suo riferimento e specifica il nome della chiave. Fai riferimento diretto a una chiave di riferimento usando virgolette ( ["key"] ) o 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-- Omettere citazioni per chiavi non strutturaliprint(testDictionary[part]) -- true
Scrittura nei dizionari
Per definire o riscribere il valore di una nuova o esistente chiave del dizionario, dichiara il nome della chiave in grassetto ( [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 di valore chiavetestDictionary["FruitCount"] = 10print(testDictionary["FruitName"]) -- Ciliegiaprint(testDictionary["Sour"]) -- falsoprint(testDictionary["FruitCount"]) -- 10
Iterazione su dizionari
Per itérare su un dizionario, usa la funzione globale pairs() in un ciclo for :
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}for key, value in pairs(testDictionary) doprint(key, value)end--[[ Risultato di Output:FruitName LemonSour trueFruitColor Yellow]]
Rimozione delle coppie di valore chiave
Per rimuovere o cancellare una coppia di valori chiave da un dizionario, imposta il suo valore per una chiave nil .
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}testDictionary["Sour"] = nilfor key, value in pairs(testDictionary) doprint(key, value)end--[[ Risultato di Output:FruitName LemonFruitColor Yellow]]
Tabelle come referenze
Se memorizzi una tabella in una nuova variabile, Luau non crea una copia di quella tabella. Invece, la variabile diventa un riferimento , o un punter, alla tabella originale. Qualsiasi riferimento a una tabella riflette qualsiasi cambiamento nella tabella originale:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- Cambia i valori nell' vettoreoriginaleoriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ Risultato di Output:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Tabelle di Clonazione
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)
Cloni profondi
Per copiare una tabella più complicata con tabelle annidate all'interno, dovrai usare una funzione ricorsiva simile alla Seguendo:
-- La funzione usata per copiare in profondità una tabella
local function deepCopy(original)
-- Definire la nuova tabella per la copia
local copy = {}
-- Loop attraverso la tabella originale per clonare
for key, value in original do
-- Se il tipo della valuta è una tabella, copialo in profondità nella chiave (indice)
-- Altrimenti (o) il tipo non è una tabella, assegnare il valore predefinito all'indice invece
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Restituisci la copia finalizzata della tabella clonata in profondità
return copy
end
Con la funzione in Posto, puoi fare una copia profonda come segue:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepCopy(original)
Tabelle congelate
Il congelamento di una tabella rende la lettura solo, che è utile per creare valori costanti che non vuoi cambiare. Il congelamento è permanente; non c'è metodo "unfreeze" o "thaw". Per controllare se una tabella è congelata, usa table.isfrozen() .
Ghiaccioli profondi
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
Congelamento Profondo
Per congelare una tabella più complicata con tabelle annidate all'interno, usa una funzione recursiva simile alla Seguendo:
local function deepFreeze(target)
-- Schiacciare leggermente la tabella
table.freeze(target)
-- Controlla ogni chiave della tabella e congelala se è una tabella
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end
Con la funzione in Posto, puoi deep freeze una tabella 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