Dicionários são tabelas que associam nomes ou chaves a um valor em vez de um índice.
Exemplo:
Sintaxe do dicionário Luau
local pet = {Name = "Bobbie",Type = "Dog",}
Use dicionários quando você precisa rotular valores, não apenas listá-los em ordem como um array faz.Pratique o uso de dicionários neste tutorial manipulando valores associados a um jogador.
Sintaxe do dicionário
Assim como arrays, dicionários são atribuídos a uma variável com parênteses curvos {}. Pares de chave-valor são armazenados em linhas separadas seguidas por um vírgula.Chaves e valores podem ser quaisquer tipos de dados, incluindo strings, números e nomes de variáveis
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Para referenciar partes ou outros objetos instanciados como chaves, use parênteses.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Crie um dicionário
Um uso diário de dicionários é organizar informações de jogador ou personagem.Essas etapas exploram como a informação de um personagem teórico inimigo pode ser armazenada e acessada
Em um novo script, crie um dicionário chamado enemy.
local enemy = {}A primeira chave no dicionário rastreará o nome do inimigo com uma variável chamada Name .
local enemy = {Name}Atribua um nome de inimigo à chave, seguido por um ponto-e-vírgula.
local enemy = {Name = "Spike",}Adicione um segundo par de chave-valor para quanta saúde o inimigo deve ter. Lembre-se, as chaves devem sempre usar o mesmo tipo de dados, mas os valores não precisam.
local enemy = {Name = "Spike",Health = 1000,}
Usar valores do dicionário
Existem duas maneiras de acessar os valores do dicionário:
- tableName["keyName"] (importante, observe 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 armazenam uma coleção de valores como uma lista de jogadores em um servidor, os codificadores geralmente usarão tableName["keyName"].Para um dicionário usado para descrever um objeto, os programadores são mais prováveis de usar tableName.keyName .
Mude um valor de dicionário
Mudar o valor de uma chave é o mesmo que qualquer outra variável; use o operador igual =.
Abaixo da tabela enemy, defina o nome do inimigo para algo diferente.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Teste e verifique a janela de saída.
Variáveis pré-existentes como chaves
Os dicionários podem interagir com variáveis pré-existentes 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 chave quando eles se juntam à experiência e, em seguida, define o valor de seus pontos para 0.
Em Serviço de Script de Servidor , 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 = {}Codifique 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 todos os objetos Jogador e uma declaração de impressão para testes.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endInsira name no dicionário playerPoints como 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 que corresponde à variável.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endExecute o projeto e observe o resultado.
Script finalizado
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 facultativos
Abaixo estão alguns desafios que se aplicam ao uso de dicionários de diferentes maneiras. Veja se você pode construir o código para isso.
- Crie uma parte de armadilha que cause dano ao longo do tempo a um jogador. Uma vez que um jogador toque na armadilha, cause-lhe dano, espere, então permita que seja danificado novamente.
- Crie uma função que verifique qual dos dois jogadores tem mais pontos acessando um dicionário.
- Crie uma cifra, um sistema de troca de uma string por outra para criar um código "secreto".Por exemplo, a letra "A" pode ser trocada por "G", ou a palavra "maçã" pode ser trocada por "laranja".
Dicionários e pares()
pairs() é uma função que é frequentemente usada para iterar por 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 dicionário.No ciclo for abaixo, a primeira variável é a key.A segunda variável é o valor.O dicionário com o qual você deseja trabalhar é 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
Ao ser executado, o código imprimirá o seguinte:
You have:43 Gold Bricks3 Carrots2 Torches
Sumário
Dicionários são tabelas que usam pares de chave-valor em vez de valores indexados.Dicionários e arrays começam de forma semelhante ao atribuir curly brackets a uma variável.Mantenha as entradas separadas com vírgulas.
Todas as chaves dentro de um dicionário devem usar o mesmo tipo de dado, mas os valores podem misturar tipos de dados sem problemas.
A maneira pela qual um dicionário é acessado pode transmitir seu propósito.Um dicionário de propriedades inimigas provavelmente será acessado com o operador ponto, enquanto uma lista de nomes provavelmente usará tableName[keyName].
Ao usar parênteses, tenha cuidado; os nomes das chaves criados dentro da tabela devem ser tratados como strings: 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 arrays, mas você pode não sempre saber o começo e o fim dessas estruturas de dados.Por exemplo, um dicionário de jogadores pode estar mudando ou os jogadores podem ter um inventário de arrays de tamanhos variados.
Nessas situações, você pode usar pairs() e ipairs() em um ciclo for para percorrer cada elemento sem pontos de início e fim conhecidos.Você também pode usar uma iteração geral através da palavra-chave in para percorrer os elementos sem a necessidade de pairs() ou ipairs().