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?

Foi útil?

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

De: http://lua-users.org/wiki/TablesTutorial

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"]};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top