Las diccionarias son tablas que asocian nombres o * llaves ** con un valor en lugar de un índice.
Ejemplo:
Sintaxis de diccionario Lua
local pet = {Name = "Bobbie",Type = "Dog",}
Usa diccionarios cuando necesites etiquetar valores, no solo listarlos en orden como lo hace un matriz —practice usando diccionarios en este tutorial al manipular los valores asociados con un jugador.
Sintaxis de diccionario
Al igual que los matices, los diccionarios se asignan a una variable con cursivos {} . Los valores de la clave se almacenan en líneas separadas seguidas por un coma. Las claves y los valores se pueden almacenar en cualquier introducirde datos, incluidos los valores de cadena, los números y los nombres de las variables.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Para referirse a partes o otros objetos instanciados como claves, use corchetes.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Crear un diccionario
Un uso diario de los 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 teórico enemigo.
En un nuevo script, crea un diccionario llamado enemy .
local enemy = {}La primera llave 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 par de valores de segundo para la cantidad de salud que debería tener el enemigo. Recuerda, las llaves siempre deben usar el mismo introducirde datos, pero los valores no tienen que.
local enemy = {Name = "Spike",Health = 1000,}
Usando valores de diccionario
Hay dos formas de acceder a los valores de diccionario: tableName["keyName"] -- Nota 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 usa generalmente depende del propósito de la tabla. Para las 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 que describe un objeto, los codificadores son más probable que usen tableName.keyName.
Cambiar un valor de diccionario
Cambiar el valor de una clavees lo mismo que cualquier otra variable; usa el operador de igualdad = =.
Debajo de la enemy, establece el nombre del enemigo a algo diferente.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Prueba y verifica la salida.
variables pre-existentes como claves
Los diccionarios pueden interactuar con las variables predeterminadas declaradas en otras partes de un script. El siguiente ejemplo de código usa una variable para agregar el nombre de un jugador como clave cuando se une a la experiencia y luego establece su valor de punto a 0.
En ServerScriptService , crea un nuevo script llamado PlayerPoints. En el script, obtén el servicio de jugadores y crea un diccionario vacío llamado playerPoints .
local Players = game:GetService("Players")local playerPoints = {}Código para establecer los puntos del 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 nombre del jugador, una propiedad en cada objeto de Name y una declaración de impresión para probar.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endInserta el nombre en el diccionario playerPoints como clave, y establece el valor, los puntos del jugador, en 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 llave 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 mira en el editor de 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, hay 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 hace daño con el tiempo a un jugador. Una vez que un jugador toca la trampa, daña a ese jugador, espera, luego permite que se dañe de nuevo.
- Crea una función que comprueba qué de dos jugadores tiene más puntos al acceder a un diccionario.
- Crea un cifro, un sistema de intercambio de una palabra por otra para crear un código "secreto", por ejemplo, cómo la letra "A" se puede intercambiar con "G", o cómo la palabra manzana se puede intercambiar por la palabra naranja.
Diccionarios y parejas()
pairs() es una función que a menudo se usa para repasar 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 for de abajo, 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
Al ejecutarse, el código imprimirá lo siguiendo:
You have:43 Gold Bricks3 Carrots2 Torches
Resumen
Los diccionarios son tablas que usan parajes de clave en lugar de valores indexados. Los diccionarios y los arrays comienzan de manera similar asignando cursivos a una variable. Mantenga las entradas separadas con comas.
Todas las llaves dentro de un diccionario deben usar el mismo introducirde datos, pero los valores pueden mezclar tipos de datos sin problema.
El estilo de cómo se accede a un diccionario puede transmitir el propósito de un diccionario. Un diccionario de propiedades enemigas probablemente se accederá con el operador de punto, mientras que una lista de nombres probablemente usará tableName[keyName].
Cuando se utilizan paréntesis, tenga cuidado; los nombres de las llaves creadas dentro de la tabla deben tratarse como cadenas: tableName["keyName"] Sin embargo, cuando se referencia objetos como partes, las citas no son necesarias: tableName[keyName] .
Muchos scripts necesitan pasar por diccionarios o matices, pero puede que no siempre sepa 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 matices de tamaños varios.
En estas situaciones, puede usar pairs() y ipairs() en un for bucle para pasar por cada elemento sin puntos de inicio y fin conocidos. También puede usar general iteración a través de la palabra clave 1> in1> para pasar por elementos sin la necesidad de 4> pairs()