I dizionari sono tabelle che associano nomi o "chiavi**" a un valore invece che un indice.
Esempio:
Syntax del dizionario Lua
local pet = {Name = "Bobbie",Type = "Dog",}
Usa i dizionari quando è necessario etichettare i valori, non solo elencarli in modo come un matricone lo fa - pratica usando i dizionari in questo tutorial manipolando i valori associati a un Giocatore.
sintassi della dizionario
Come gli array, i dizionari vengono assegnati a una variabile con parentesi curly {} . Key value pairs vengono memorizzati su linee separate seguite da un punto virgolaso. Le chiavi e i valori possono essere qualsiasi inserisci / scrividi dati, tra cui stringhe, numeri e nomi variabili.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Per fare riferimento alle parti o ad altri oggetti istanziati come chiavi, usa i brackets.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Creazione di un dizionario
Un uso quotidiano dei dizionari è l'organizzazione delle informazioni del giocatore o del personaggio. Questi passaggi esplorano come le informazioni di un personaggio teorico nemico possono essere memorizzate e accedute.
In uno script nuovo, crea un dizionario chiamato enemy .
local enemy = {}La prima chiave nel dizionario traccerà il nome dell'nemicocon 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 l'avversario. Ricorda, le chiavi dovrebbero sempre utilizzare lo stesso inserisci / scrividi dati, ma i valori non lo sono.
local enemy = {Name = "Spike",Health = 1000,}
Uso dei valori della dizionaria
Ci sono due modi per accedere ai valori della dizionaria: tableName["keyName"] -- Nota le citazioni tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Quale stile usare di solito dipende dal scopo della tabella. Per le tabelle che contengono una collezione di valori come una lista di giocatori in un Server, i coders di solito usano tableName ["keyName"). Per un dizionario usato per descrivere un oggetto, i coders sono più probabili di usare tableName.keyName.
Cambiare un valore di dizionario
Cambiare il valore di una chiave è la stessa cosa di qualsiasi altra variabile; usa l'operatore uguale = .
Sotto la enemy tabella, imposta il nome del nemico in qualcosa di diverso.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Prova e controlla la finestra di uscita.
变量 preesistenti come chiavi
I dizionari possono interagire con le variabili preesistenti dichiarate in altre parti di uno script. L'esempio di codice seguente utilizza una variabile per aggiungere il nome di un Giocatorecome chiave quando si unisce all'esperienza e poi imposta il valore dei punti a 0.
In ServerScriptService , crea uno script nuovo chiamato PlayerPoints. Nello script, ottieni il servizio dei giocatori e crea un dizionario vuoto chiamato playerPoints .
local Players = game:GetService("Players")local playerPoints = {}Codice 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 Player oggetto e una dichiarazione di stampa per il test.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endInserisci il nome nel playerPoints dizionario come chiave e imposta il valore, i punti del Giocatore, su 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 guarda nell'editor delle uscite.
scriptfinito
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 riportati alcuni delle sfide che si applicano all'uso dei dizionari in modi diversi. Vedere se puoi costruire il codice per questi.
- Crea una parte della trappola che danneggia nel tempo un Giocatore. Una volta che un giocatore tocca la trappola, danneggiali, aspetta e poi consenti loro di essere danneggiati di nuovo.
- Crea una funzione che controlla quale dei due giocatori ha il maggior numero di punti accedendo a un dizionario.
- Crea un cifro, un sistema di scambio di una parola per un'altra per creare un codice "segreto", ad esempio, come la lettera "A" può essere scambiata con "G", o come la parola mela può essere scambiata per la parola arancione.
Dizionari e coppie()
pairs() è una funzione che viene spesso utilizzata per itérare attraverso dizionari . Un esempio è mostrato di seguito.
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 di un elemento di dizionario. Nel for loop seguente, la prima variabile è la chiave. La seconda variabile è il valore. Il dizionario che si desidera lavorare con viene passato in to 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 Seguendoviene visualizzato:
You have:43 Gold Bricks3 Carrots2 Torches
Panoramica
I dizionari sono tabelle che utilizzano coppie di valori chiave invece che valori memorizzati. I dizionari e gli array iniziano in modo simile assegnando i caratteri diagonali a una variabile. Mantieni gli elementi separati con i virgole.
Tutte le chiavi in un dizionario dovrebbero utilizzare lo stesso inserisci / scrividi dati, ma i valori possono mescolare i tipi di dati senza problemi.
Lo stile in cui viene accesso un dizionario può trasmettere lo scopo di un dizionario. Un dizionario delle proprietà nemiche verrà probabilmente accessato con l'operatore punto, mentre una lista di nomi utilizza probabilmente tableName[keyName].
Quando si utilizzano i brackets, fare attenzione; i nomi chiave creati all'interno della tabella devono essere trattati come stringhe: tableName["keyName"] . Tuttavia, quando si fa riferimento a oggetti come parti, non sono necessarie le citazioni: tableName[keyName] .
Molti script devono passare attraverso dizionari o mappe, ma potresti non conoscere sempre l'inizio e la fine di queste strutture di dati. Ad esempio, un dizionario di giocatori potrebbe essere in cambio, o i giocatori potrebbero avere un inventario di matrici di varie dimensioni.
In queste situazioni, puoi usare pairs() e ipairs() in un for loop per passare attraverso ogni elemento senza punti di partenza e fine conosciuti. Puoi anche usare l'iter generico attraverso il 1> in1> keyword per passare attraverso gli elementi senza la necessità di 4> pairs()