I dizionari sono tabelle che associano nomi o chiavi con 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.Esercitati nell'utilizzo dei dizionari in questo tutorial manipolando i valori associati a un giocatore.
Sintassi dizionario
Come gli array, i dizionari vengono assegnati a una variabile con parentesi graffe {} . Coppie chiave-valore vengono memorizzate su linee separate seguite da un punto virgola.Le chiavi e i valori possono essere qualsiasi tipo di dato, 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 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 nemico alla chiave, seguito da un periodo.
local enemy = {Name = "Spike",}Aggiungi una seconda coppia di chiave-valore per quanta salute dovrebbe avere il nemico. Ricorda, le chiavi dovrebbero sempre utilizzare lo stesso tipo di 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 dipende di solito 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 è uguale a 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 uscita.
Variable preesistenti come chiavi
Gli 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 giocatore come chiave quando si unisce all'esperienza e poi imposta il valore dei suoi punti a 0.
In ServerScriptService , crea un nuovo script chiamato PlayerPoints.Nello 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 corrispondente 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'输出.
Script completato
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 facoltative
Ecco 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 danneggiati di nuovo.
- Crea una funzione che controlla quale dei due giocatori abbia più punti accedendo a un dizionario.
- Crea un cifrario, 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 "mela" può essere scambiata con "arancione".
Dizioniari 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 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("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Quando viene eseguito, il codice stamperà quanto segue:
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 graffe a una variabile.Mantieni le voci separate con virgole.
Tutte le chiavi all'interno di un dizionario dovrebbero utilizzare lo stesso tipo di dati, ma i valori possono mischiare i tipi di dati senza problemi.
Il modo in cui si accede a un dizionario 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, le citazioni non sono necessarie: 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 potrebbe essere in via di cambiamento, o i giocatori potrebbero avere un inventario di array di varie dimensioni
In queste situazioni, puoi utilizzare pairs() e ipairs() in un ciclo for per passare attraverso ogni elemento senza punti di inizio e fine noti.Puoi anche usare l'iterazione generale attraverso la parola chiave in per passare attraverso gli elementi senza la necessità di pairs() o ipairs() .