I dizionari sono tabelle che associano nomi o chiavi a un valore invece di un indice.
Esempio:
local pet = {
Name = "Bobbie",
Type = "Dog",
}Utilizza i dizionari quando hai bisogno di etichettare i valori, non solo di elencarli in ordine come fa un array. Esercitati a utilizzare i dizionari in questo tutorial manipolando i valori associati a un giocatore.
Sintassi del dizionario
Come gli array, i dizionari vengono assegnati a una variabile con parentesi graffe {}. Le coppie chiave-valore sono memorizzate su righe separate seguite da una virgola. Le chiavi e i valori possono essere di qualsiasi tipo di dato, comprese stringhe, numeri e nomi di variabili.
local playerNames = {
player1 = "Zap",
player2 = "Kel",
}
print(playerNames["player1"])Per fare riferimento a parti o ad altri oggetti istanziati come chiavi, utilizza le parentesi quadre.
local greenPart = workspace.GreenPart
local redPart = workspace.RedPart
local partList = {
[greenPart] = true,
[redPart] = false,
}
print(partList[redPart])Creare un dizionario
Un uso quotidiano dei dizionari è organizzare le informazioni sui giocatori o sui personaggi. Questi passaggi esplorano come le informazioni di un personaggio nemico teorico possono essere memorizzate e accessibili.
In un nuovo script, crea un dizionario chiamato enemy.
local enemy = {}La prima chiave nel dizionario traccerà il nome del nemico con una variabile chiamata Name.
local enemy = {Name}Assegna un nome al nemico alla chiave, seguito da una virgola.
local enemy = {Name = "Spike",}Aggiungi una seconda coppia chiave-valore per quanto salute dovrebbe avere il nemico. Ricorda, le chiavi dovrebbero sempre utilizzare lo stesso tipo di dato, ma i valori non devono.
local enemy = {Name = "Spike",Health = 1000,}
Utilizzare i valori del dizionario
Ci sono due modi per accedere ai valori del dizionario:
- tableName["keyName"] (è importante notare le virgolette)
- tableName.keyName
local enemy = {
Name = "Spike",
Health = 1000,
}
print("Il villain " .. enemy["Name"] .. " si avvicina!")
print("Il villain " .. enemy.Name .. " si avvicina!")Quale stile utilizzare dipende solitamente dallo scopo della tabella. Per le tabelle che contengono una raccolta di valori come un elenco di giocatori in un server, i programmatori di solito utilizzano tableName["keyName"]. Per un dizionario utilizzato per descrivere un oggetto, i programmatori sono più propensi a utilizzare tableName.keyName.
Cambiare un valore del dizionario
Cambiare il valore di una chiave è lo stesso di qualsiasi altra variabile; utilizza l'operatore di uguaglianza =.
Sotto la tabella enemy, imposta il nome del nemico su qualcos'altro.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("Il nome del nemico è " .. enemy.Name)Esegui il test di gioco e controlla la finestra di output.
Variabili preesistenti come chiavi
I dizionari possono interagire con variabili preesistenti dichiarate in altre parti di uno script. Il seguente esempio di codice utilizza una variabile per aggiungere il nome di un giocatore come chiave quando si unisce al gioco e poi imposta il valore dei suoi punti a 0.
In ServerScriptService, crea un nuovo script chiamato PlayerPoints. Nello script, ottieni il servizio Players e crea un dizionario vuoto chiamato playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Codifica una funzione locale per impostare i punti del giocatore con un parametro per una nuova variabile giocatore. Collega la funzione all'evento Players.PlayerAdded.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)Nella funzione, aggiungi una variabile per ottenere il Name del giocatore, una proprietà in ogni oggetto Player, e una dichiarazione di stampa per il test.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("ciao " .. name)endInserisci name nel dizionario playerPoints come chiave e imposta il valore, i punti del giocatore, a 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("ciao " .. name)playerPoints[name] = 0endUsa name per stampare il nome del giocatore e playerPoints[name] per stampare il valore della chiave corrispondente alla variabile.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("ciao " .. name)playerPoints[name] = 0print(name .. " ha " .. playerPoints[name] .. " punti.")endEsegui il progetto e osserva l'output.
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("ciao " .. name)
playerPoints[name] = 0
print(name .. " ha " .. playerPoints[name] .. " punti.")
end
Players.PlayerAdded:Connect(setPoints)Sfide opzionali
Di seguito sono riportate alcune sfide che si applicano all'uso dei dizionari in modi diversi. Vedi se riesci a completare il codice per questi.
- Crea una parte trappola che infligge danni nel tempo a un giocatore. Una volta che un giocatore tocca la trappola, infliggigli danni, aspetta, poi permetti di infliggergli danni di nuovo.
- Crea una funzione che controlla quale dei due giocatori ha il punteggio più alto accedendo a un dizionario.
- Crea un cifrario, un sistema di scambio di una stringa con un'altra per creare un codice "segreto". Ad esempio, la lettera "A" può essere scambiata con "G", o la parola "mela" può essere scambiata con "arancia".
Dizionari e pairs()
pairs() è una funzione che viene spesso utilizzata per iterare attraverso i dizionari. Un esempio è mostrato di seguito.
local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " è " .. value)
endpairs() può essere utilizzato per lavorare con la chiave, il valore o entrambi di un elemento del dizionario. Nel ciclo for qui sotto, la prima variabile è la chiave. La seconda variabile è il valore. Il dizionario con cui vuoi lavorare viene passato a pairs().
local inventory = {
["Gold Bricks"] = 43,
Carrots = 3,
Torches = 2,
}
print("Hai:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
endQuando eseguito, il codice stamperà quanto segue:
Hai:
43 Gold Bricks
3 Carrots
2 TorchesRiepilogo
I dizionari sono tabelle che utilizzano coppie chiave-valore invece di valori indicizzati. I dizionari e gli array iniziano in modo simile assegnando parentesi graffe a una variabile. Mantieni le voci separate da virgole.
Tutte le chiavi all'interno di un dizionario dovrebbero utilizzare lo stesso tipo di dato, ma i valori possono mescolare i tipi di dato senza problemi.
Il modo in cui un dizionario viene accesso può trasmettere il suo scopo. Un dizionario delle proprietà del nemico sarà probabilmente accessibile con l'operatore punto, mentre un elenco di nomi sarà probabilmente utilizzato con tableName[keyName].
Quando utilizzi le parentesi quadre, fai attenzione; i nomi delle chiavi creati all'interno della tabella devono essere trattati come stringhe: tableName["keyName"]. Tuttavia, quando fai riferimento a oggetti come parti, le virgolette non sono necessarie: tableName[keyName].
Molti script devono attraversare dizionari o array, ma potresti non conoscere sempre l'inizio e la fine di queste strutture dati. Ad esempio, un dizionario di giocatori potrebbe essere in cambiamento, o i giocatori potrebbero avere un inventario array di dimensioni variabili.
In queste situazioni, puoi utilizzare pairs() e ipairs() in un ciclo for per attraversare ogni elemento senza punti di inizio e fine noti. Puoi anche utilizzare l'iterazione generale attraverso la parola chiave in per scorrere gli elementi senza la necessità di pairs() o ipairs().