Tabelle

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

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 elementi
local 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 elementi
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- Una Stringa
print(testArray[2]) -- 3.14159
print(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] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(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 generale
for index, value in testArray do
print(index, value)
end
-- Iterate utilizzando l'operatore di lunghezza dell' array (#)
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ Risultato di Output:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 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 Stringa
print(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 Articolo
print(testArray[2]) -- NUOVO ARTICOLO #2
print(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 Articolo
print(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 stringa
print(testDictionary["PartType"]) -- Blocca
-- Omettere citazioni per chiavi non strutturali
print(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 esistenti
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- Inserisci una nuova coppia di valore chiave
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- Ciliegia
print(testDictionary["Sour"]) -- falso
print(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) do
print(key, value)
end
--[[ Risultato di Output:
FruitName Lemon
Sour true
FruitColor 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"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Risultato di Output:
FruitName Lemon
FruitColor 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 = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Cambia i valori nell' vettoreoriginale
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Risultato di Output:
Original: 10 20
Reference: 10 20
Reference: 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