Los diccionarios son tablas que asocian nombres o "*keys**" con un valor en lugar de un índice.
Ejemplo:
Sintaxis del diccionario Lua
local pet = {Name = "Bobbie",Type = "Dog",}
Usa diccionarios cuando necesites etiquetar valores, no solo enumerarlos en orden como lo hace una matriz, practica usar diccionarios en este tutorial manipulando valores asociados con un jugador.
Sintaxis del diccionario
Al igual que los arrays, los diccionarios se asignan a una variable con paréntesis curly {} . Los pares de valores clave se almacenan en líneas separadas seguidas de una coma. Las llaves y los valores pueden ser de cualquier introducirde datos, incluyendo cadenas, números y nombres de variables.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Para hacer referencia a partes u otros objetos instanciados como teclas, use paréntesis.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Creando un diccionario
Un uso diario de los diccionarios es organizar la información del jugador o del 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 tecla en el diccionario rastreará el nombre del enemigo con una variable llamada name.
local enemy = {Name}Asigna un nombre enemigo a la clave, seguido de una coma.
local enemy = {name = "Spike",}Añade un segundo par de valores clave para saber la cantidad de salud que debe tener el enemigo. Recuerda, las llaves siempre deben usar el mismo introducirde datos, pero los valores no tienen que hacerlo.
local enemy = {Name = "Spike",Health = 1000,}
Usando Valores del Diccionario
Hay dos formas de acceder a los valores del diccionario: tableName["keyName"] -- Toma nota de las citas tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print ("The villain " .. enemy["Name"] .. " approaches!")print ("The villain " .. enemy.Name .. " approaches!")
El estilo a 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.
Cambiando el valor de un diccionario
Cambiar el valor de una clavees lo mismo que cambiar cualquier otra variable; usa el igual = operador.
Debajo de la mesa enemy, pon el nombre del enemigo a otra cosa.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print ("The enemy's name is " .. enemy.Name)Reproduce la prueba y comprueba la ventana de salida.
Variables preexistentes como llaves
Los diccionarios pueden interactuar con variables preexistentes declaradas en otras partes de un script. El siguiente ejemplo de codificación usa una variable para agregar el nombre de un jugador como clave cuando se unen a la experiencia y luego establece su valor de puntos en 0.
En ServerScriptService , cree un nuevo script llamado PlayerPoints. En el script, obtenga el Servicio de jugadores y cree un diccionario vacío llamado playerPoints.
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 Jugador objeto y una sentencia de impresión para pruebas.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endInserta el nombre en el playerPoints diccionario como una clave, y pon 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 tecla que coincide 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
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 la trampa que hace daño con el tiempo a un jugador. Una vez que un jugador toque la trampa, dale daño, espera, luego déjalos ser dañados de nuevo.
- Crea una función que compruebe cuál de los dos jugadores tiene más puntos accediendo a un diccionario.
- Crea un cifrado, un sistema de intercambiar una palabra por otra para crear un código "secreto," por ejemplo, cómo cambiar la letra "A" por "G" o cómo cambiar la palabra manzana por la palabra naranja.
Diccionarios y pares ()
pairs() es una función que a menudo se usa para iterar a través de diccionarios . Un ejemplo se puede ver 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 usan pares de valores clave en lugar de valores indexados. Los diccionarios y los arrays comienzan de manera similar asignando paréntesis entre comas a una variable. Mantenga las entradas separadas con comas.
Todas las teclas 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 puntos, mientras que una lista de nombres probablemente usará tableName[keyName].
Cuando uses paréntesis, ten cuidado; los nombres de teclas creados dentro de la tabla deben ser tratados como cadenas: tableName["keyName"] . Sin embargo, al hacer referencia a objetos como partes, las citas no son necesarias: tableName[keyName] .
Muchos scripts necesitan pasar por diccionarios o matrices, 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 matrices de diferentes tamaños.
En estas situaciones, puede usar pairs() y ipairs() en un bucle for para pasar por cada elemento sin puntos de inicio y final conocidos. También puede usar la iteración general a través de la palabra clave in para pasar por los elementos sin la necesidad de pairs() o ipairs() .