Los diccionarios son tablas que asocian nombres o claves con un valor en lugar de un índice.
Ejemplo:
Sintaxis del diccionario Luau
local pet = {Name = "Bobbie",Type = "Dog",}
Usa diccionarios cuando necesites etiquetar valores, no solo listarlos en orden como lo hace un array.Practica el uso de diccionarios en este tutorial manipulando los valores asociados con un jugador.
Sintaxis de diccionario
Al igual que los arrays, los diccionarios se asignan a una variable con curly brackets {} . Pares de clave-valor se almacenan en líneas separadas seguidas de un coma.Las claves y los valores pueden ser cualquier introducirde dato, incluidas cadenas, números y nombres de variables.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Para referenciar partes o objetos instanciados como claves, utilice paréntesis.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Crear un diccionario
Un uso diario de diccionarios es organizar la información del jugador o personaje.Estos pasos exploran cómo se puede almacenar y acceder a la información de un personaje enemigo teórico.
En un nuevo script, crea un diccionario llamado enemy .
local enemy = {}La primera clave en el diccionario rastreará el nombre del enemigo con una variable llamada Name .
local enemy = {Name}Asigna un nombre de enemigo a la clave, seguido de un coma.
local enemy = {Name = "Spike",}Añade un segundo par de clave-valor para cuánta salud debería tener el enemigo. Recuerde, las claves siempre deben usar el mismo introducirde dato, pero los valores no tienen que hacerlo.
local enemy = {Name = "Spike",Health = 1000,}
Usar valores de diccionario
Hay dos maneras de acceder a los valores de diccionario:
- tableName["keyName"] (importante, tenga en cuenta las citas)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
El estilo que se debe usar generalmente depende del propósito de la tabla.Para tablas que contienen una colección de valores como una lista de jugadores en un servidor, los codificadores generalmente usarán tableName["keyName"] .Para un diccionario utilizado para describir un objeto, es más probable que los codificadores utilicen tableName.keyName .
Cambiar un valor de diccionario
Cambiar el valor de una clave es igual que cualquier otra variable; utilice el operador igual = .
Debajo de la tabla enemy, establece el nombre del enemigo a algo más.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Prueba y verifica la ventana de salida.
Variables preexistentes como claves
Los diccionarios pueden interactuar con variables preexistentes declaradas en otras partes de un script.El siguiente ejemplo de codificación utiliza una variable para agregar el nombre de un jugador como clave cuando se unen a la experiencia y luego establece el valor de sus puntos en 0.
En ServerScriptService , crea un nuevo script llamado PlayerPoints.En el script, obtenga el servicio de jugadores y cree un diccionario vacío llamado playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Codifica una función local para establecer puntos de jugador con un parámetro para una nueva variable de jugador. Conecta la función al evento Players.PlayerAdded.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)En la función, agregue una variable para obtener el Name del jugador, una propiedad en cada objeto Jugador , y una declaración de impresión para probar.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endInserta name en la diccionario playerPoints como clave y establece el valor, los puntos del jugador, a 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endUsa name para imprimir el nombre del jugador y playerPoints[name] para imprimir el valor de la clave que coincida con la variable.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endEjecuta el proyecto y observa la Salida.
scriptterminado
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)
Desafíos opcionales
A continuación se muestran algunos desafíos que se aplican al uso de diccionarios de diferentes maneras. Vea si puede construir el código para estos.
- Crea una parte de trampa que daña con el tiempo a un jugador. Una vez que un jugador toca la trampa, dañarlo, espera, luego permite que sea dañado nuevamente.
- Crea una función que verifica cuál de dos jugadores tiene más puntos al acceder a un diccionario.
- Crea un cifro, un sistema de intercambiar una cadena por otra para crear un código " secreto ".Por ejemplo, la letra "A" se puede intercambiar por "G", o la palabra "manzana" se puede intercambiar por "naranja".
Diccionarios y pares()
pairs() es una función que a menudo se usa para iterar a través de diccionarios . Un ejemplo se ve a continuación.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() se puede usar para trabajar con la clave, el valor o ambos de un elemento de diccionario.En el bucle for a continuación, la primera variable es la clave.La segunda variable es el valor.El diccionario con el que desea trabajar se pasa a pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Cuando se ejecute, el código imprimirá lo siguiendo:
You have:43 Gold Bricks3 Carrots2 Torches
Resumen
Los diccionarios son tablas que utilizan pares de clave-valor en lugar de valores indexados.Los diccionarios y los arrays comienzan de manera similar asignando curly brackets a una variable.Mantén las entradas separadas con comas.
Todas las claves dentro de un diccionario deben usar el mismo introducirde dato, pero los valores pueden mezclar tipos de dato sin problema.
La forma en que se accede a un diccionario puede transmitir su propósito.Un diccionario de propiedades enemigas probablemente se accederá con el operador punto, mientras que una lista de nombres probablemente use tableName[keyName] .
Al usar paréntesis, tenga cuidado; los nombres de clave creados dentro de la tabla deben tratarse como cadenas: tableName["keyName"] .Sin embargo, al hacer referencia a objetos como partes, no se necesitan las citaciones: tableName[keyName] .
Muchos scripts deben pasar por diccionarios o arrays, pero es posible que no siempre sepas el comienzo y el final de estas estructuras de datos.Por ejemplo, un diccionario de jugadores puede estar cambiando, o los jugadores pueden tener un inventario de arrays de diferentes tamaños.
En estas situaciones, puedes usar pairs() y ipairs() en un bucle for para recorrer cada elemento sin puntos de inicio y final conocidos.También puedes usar una iteración general a través de la palabra clave in para recorrer los elementos sin la necesidad de pairs() o ipairs().