Dicionários são tabelas que associam nomes ou “chaves**” a um valor em vez de um índice.
Exemplo:
Sintaxis de dicionário Lua
local pet = {Name = "Bobbie",Type = "Dog",}
Use dicionários quando você precisa etiquetar valores, não apenas listá-los em ordem como um array faz - pratique usar dicionários neste tutorial manipulando valores associados a um jogador.
Sintância de Dicionário
Like arrays, dictionaries are assigned to a variable with curly brackets {} . Key value pairs are stored on separate lines followed by a comma. Keys and values can be any data digitar, including strings, numbers, and variable names.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Para referenciar peças ou outros objetos instanciados como chaves, use aspas.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Criando um Dicionário
Um uso diário de dicionários é organizar informações de jogador ou personagem. Essas etapas exploram como as informações de um personagem teórico inimigo podem ser armazenadas e acessadas.
Em um novo script, crie um dicionário chamado enemy .
local enemy = {}A primeira chave no dicionário rastreará o nome do adversário / inimigocom uma variável chamada Name.
local enemy = {Name}Atribua um nome de inimigo à chave, seguido por um ponto.
local enemy = {Name = "Spike",}Adicione um segundo par de chave-valor para quanta saúde o inimigo deve ter. Lembre-se, chaves sempre devem usar o mesmo digitarde dado, mas valores não precisam.
local enemy = {Name = "Spike",Health = 1000,}
Usando Valores do Dicionário
Existem duas maneiras de acessar valores do dicionário: tableName["keyName"] -- Note as citações tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Qual estilo usar geralmente depende do propósito da tabela. Para tabelas que contêm uma coleção de valores, como uma lista de jogadores em um servidor, os coders geralmente usarão tableName ["keyName"). Para um dicionário usado para descrever um Objeto, os coders são mais prováveis de usar tableName.keyName.
Mudando um Valor do Dicionário
Alterar o valor de uma chave é o mesmo que qualquer outra variável; use o operador de igualdade =.
Embaixo da tabela enemy, defina o nome do adversário / inimigopara algo diferente.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Teste e verifique a janela Saída.
Variáveis Pré-Existentes como Chaves
Dicionários podem interagir com variáveis previamente declaradas em outras partes de um script. O seguinte exemplo de código usa uma variável para adicionar o nome de um jogador como uma chave quando eles se juntam à experiência e depois definem seu valor de ponto para 0.
Em ServerScriptService , crie um novo script chamado PlayerPoints. No script, obtenha o Serviço de Jogadores e crie um dicionário vazio chamado playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Código uma função local para definir pontos do jogador com um parâmetro para uma nova variável de jogador. Conecte a função ao evento Players.PlayerAdded.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)Na função, adicione uma variável para obter o Name do jogador, uma propriedade em cada Player Objetoe uma declaração de saída para testes.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endInsira o nome no dicionário playerPoints como uma chave, e defina o valor, os pontos do jogador, para 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endUse name para imprimir o nome do jogador e playerPoints[name] para imprimir o valor da chave correspondendo à variável.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endExecute o projeto e olhe para o editor de saída.
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)
Desafios Opcionais
Abaixo estão alguns desafios que se aplicam ao uso de dicionários de maneiras diferentes. Veja se você pode construir o código para esses.
- Crie uma parte de armadilha que causa dano ao longo do tempo para um jogador. Depois que um jogador tocar a armadilha, danifique-os, espere e depois permita que eles sejam danificados novamente.
- Crie uma função que verifica qual dos dois jogadores tem mais pontos ao acessar um dicionário.
- Crie um cifro, um sistema de troca de uma palavra por outra para criar um código " secreto", por exemplo, como a letra "A" pode ser trocada por "G", ou como a palavra " maçã " pode ser trocada pela palavra " laranja".
Dicionários e parceiros()
pairs() é uma função que geralmente é usada para itera através de dicionários . Um exemplo é visto abaixo.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() pode ser usado para trabalhar com a chave, o valor ou ambos de um elemento de dicionário. No forço abaixo, a primeira variável é a chave. A segunda variável é o valor. O dicionário que você deseja trabalhar com é passado para pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Quando executado, o código imprimirá o seguindo:
You have:43 Gold Bricks3 Carrots2 Torches
Visão Geral
Dicionários são tabelas que usam pares de valor em vez de valores indexados. Dicionários e arranjos começam semelhantes, atribuindo espaços em branco a uma variável. Mantenha as entradas separadas com vírus.
Todas as chaves dentro de um dicionário devem usar o mesmo digitarde dado, mas os valores podem misturar tipos de dado sem problemas.
O estilo de como um dicionário é acessado pode transmitir o propósito de um dicionário. Um dicionário de propriedades inimigas pode ser acessado com o operador ponto, enquanto uma lista de nomes pode usar tableName[keyName].
Ao usar páginas, tenha cuidado; nomes de chave criados dentro da tabela devem ser tratados como estritos: tableName["keyName"] . No entanto, ao referenciar objetos como peças, as citações não são necessárias: tableName[keyName] .
Muitos scripts precisam passar por dicionários ou matrizes, mas você pode não sempre saber o início e o fim dessas estruturas de dados. Por exemplo, um dicionário de jogadores pode estar alterando, ou os jogadores podem ter um inventário de matrizes de tamanhos diferentes.
Nessas situações, você pode usar pairs() e ipairs() em um for loop para passar por cada elemento sem pontos de início e fim conhecidos. Você também pode usar iteração geral através do termo 1> in1> para passar por elementos sem a necessidade de 4> pairs