I dizionari sono tabelle che associano nomi o chiavi a un valore invece di un indice.
Esempio:
Sintassi del dizionario Luau
local pet = {Name = "Bobbie",Type = "Dog",}
Usa i dizionari quando devi etichettare i valori, non solo elencarli in ordine come un array fa.Pratica l'uso di dizionari in questo tutorial manipolando i valori associati a un Giocatore.
Sintassi della dizionaria
Come gli array, i dizionari vengono assegnati a una variabile con parentesi curly {} . Coppie chiave-valore vengono memorizzate su linee separate seguite da un punto virgola.Le chiavi e i valori possono essere qualsiasi inserisci / scrividato, incluse le stringhe, i numeri e i nomi delle variabili.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Per fare riferimento a parti o altri oggetti istanziati come chiavi, usa i parentesi.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Crea un dizionario
Un uso quotidiano dei dizionari è l'organizzazione delle informazioni sul giocatore o sul personaggio.Questi passaggi esplorano come le informazioni di un personaggio nemico teorico possano essere memorizzate e accessate.
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 nemico alla chiave, seguito da un punto virgola.
local enemy = {Name = "Spike",}Aggiungi un secondo paio di chiave-valore per quanta salute dovrebbe avere il nemico. Ricorda, le chiavi dovrebbero sempre utilizzare lo stesso inserisci / scrividi dati, ma i valori non devono.
local enemy = {Name = "Spike",Health = 1000,}
Usa i valori del dizionario
Ci sono due modi per accedere ai valori del dizionario:
- tableName["keyName"] (importante, nota le citazioni)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Lo stile da utilizzare di solito dipende dallo scopo della tabella.Per le tabelle che contengono una collezione 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ù probabili ad utilizzare tableName.keyName .
Cambia un valore di dizionario
Cambiare il valore di una chiave è lo stesso di qualsiasi altra variabile; usa l'operatore uguale =.
Sotto la tabella enemy, imposta il nome del nemico su qualcos'altro.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Prova e controlla la finestra di output.
Variable preesistenti come chiavi
I dizionari possono interagire con le variabili preesistenti dichiarate in altre parti di uno script.L'esempio di codifica seguente utilizza una variabile per aggiungere il nome di un Giocatorecome chiave quando si unisce all'esperienza e poi imposta il valore dei loro punti a 0.
In ServerScriptService , crea un nuovo script con il nome PlayerPoints.Nell' script, ottieni il servizio dei giocatori 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 del giocatore. Connetti 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 Giocatore e una dichiarazione di stampa per il test.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. 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("hello " .. name)playerPoints[name] = 0endUsa name per stampare il nome del giocatore e playerPoints[name] per stampare il valore della chiave che corrisponde alla variabile.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endEsegui il progetto e osserva l'Output.
scriptterminato
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)
Sfide opzionali
Di seguito sono riportate alcune sfide che si applicano all'utilizzo di dizionari in modi diversi. Vedi se puoi costruire il codice per questi.
- Crea una parte della trappola che infligge danni nel tempo a un Giocatore. Una volta che un giocatore tocca la trappola, danneggialo, attendi, quindi permetti loro di essere nuovamente danneggiati.
- Crea una funzione che controlla quale dei due giocatori abbia il maggior numero di punti accedendo a un dizionario.
- Crea una cifra, un sistema di scambio di una stringa per un'altra per creare un codice "segreto".Ad esempio, la lettera "A" può essere scambiata con "G", o la parola "apple" può essere scambiata con "orange".
Dizionari e pairs()
pairs() è una funzione che viene spesso utilizzata per iterare attraverso dizionari . Un esempio è visto qui sotto.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() può essere utilizzato per lavorare con la chiave, il valore o entrambi gli elementi di un dizionario.Nel ciclo for 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("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Quando viene eseguito, il codice stamperà quanto Seguendo:
You have:43 Gold Bricks3 Carrots2 Torches
Sommariamente
I dizionari sono tabelle che utilizzano coppie chiave-valore invece di valori indicizzati.Dizionari e array iniziano in modo simile assegnando parentesi curly a una variabile.Mantieni le entrate separate con i virgola.
Tutte le chiavi all'interno di un dizionario dovrebbero utilizzare lo stesso inserisci / scrividi dati, ma i valori possono mescolare i tipi di dati senza problemi.
Il modo in cui un dizionario viene accesso può trasmettere il suo scopo.Un dizionario delle proprietà nemiche sarà probabilmente accessibile con l'operatore punto, mentre un elenco di nomi probabilmente utilizzerà tableName[keyName] .
Quando si usano parentesi, sii attento; i nomi delle chiavi create all'interno della tabella devono essere trattati come stringhe: tableName["keyName"] .Tuttavia, quando si fa riferimento a oggetti come parti, non sono necessite le citazioni: tableName[keyName] .
Molti script devono passare attraverso dizionari o array, ma potresti non conoscere sempre l'inizio e la fine di queste strutture di dati.Ad esempio, un dizionario di giocatori può essere in via di cambiamento, o i giocatori possono avere un inventario di dimensioni variabili di array.
In queste situazioni, puoi usare pairs() e ipairs() in un ciclo for per passare attraverso ogni elemento senza punti di inizio e fine noti.Puoi anche utilizzare l'iterazione generale attraverso la parola chiave in per passare attraverso gli elementi senza la necessità di pairs() o ipairs() .