Como inicializar rapidamente uma tabela associativa na Lua?
-
21-08-2019 - |
Pergunta
Na Lua, você pode criar uma tabela da seguinte forma:
local t = { 1, 2, 3, 4, 5 }
No entanto, eu quero criar uma tabela associativa, eu tenho que fazê-lo da seguinte maneira:
local t = {}
t['foo'] = 1
t['bar'] = 2
A seguir dá um erro:
local t = { 'foo' = 1, 'bar' = 2 }
Existe uma maneira de fazê-lo de forma semelhante ao meu primeiro trecho de código?
Solução
A maneira correta de escrever este é ou
local t = { foo = 1, bar = 2}
Ou, se as chaves na sua mesa não são identificadores legais:
local t = { ["one key"] = 1, ["another key"] = 2}
Outras dicas
Eu acredito que funciona um pouco melhor e compreensível se você olhar para ele como este
local tablename = {["key"]="value",
["key1"]="value",
...}
encontrar um resultado com: tablename.key = valor
Tabelas como dicionários
As tabelas podem também ser usados ??para armazenar informações que não é indexada numericamente, ou sequencialmente, como com matrizes. Estes tipos de armazenamento são às vezes chamado de dicionários, arrays associativos, hashes, ou mapeamento tipos. Nós vamos usar o dicionário prazo, onde um par de elemento tem uma chave e um valor. A chave é usada para definir e recuperar um valor associado com isso. Nota que, assim como matrizes, podemos usar a tabela [key] = value formatar para inserir elementos em cima da mesa. A chave não precisa ser um número, ele pode ser uma string, ou para que o assunto, quase qualquer outro objeto Lua (Excepto para nulo ou 0/0). Vamos construir uma tabela com alguma key-value pares em que:
t = {maçã = "green", laranja = "laranja", banana = "amarelo"} para k, v em pares (t) fazer print (k, v) de laranja final maçã verde alaranjado banana amarela
Para inicializar matriz associativa que tem as chaves string pareados por valores de cadeia, você deve usar
local petFamilies = {["Bat"]="Cunning",["Bear"]="Tenacity"};
e não
local petFamilies = {["Bat"]=["Cunning"],["Bear"]=["Tenacity"]};