Как быстро инициализировать ассоциативную таблицу в Lua? - PullRequest
31 голосов
/ 04 февраля 2009

В Lua вы можете создать таблицу следующим образом:

local t = { 1, 2, 3, 4, 5 }

Однако я хочу создать ассоциативную таблицу, я должен сделать это следующим образом:

local t = {}
t['foo'] = 1
t['bar'] = 2

следующее выдает ошибку:

local t = { 'foo' = 1, 'bar' = 2 }

Есть ли способ сделать это так же, как мой первый фрагмент кода?

Ответы [ 3 ]

58 голосов
/ 05 февраля 2009

Правильный способ написать это либо

local t = { foo = 1, bar = 2}

Или, если ключи в вашей таблице не являются юридическими идентификаторами:

local t = { ["one key"] = 1, ["another key"] = 2}
8 голосов
/ 06 декабря 2011

Я верю, что это работает немного лучше и понятно, если вы посмотрите на это так

local tablename = {["key"]="value",
                   ["key1"]="value",
                   ...}

поиск результата с помощью: tablename.key = value

Таблицы в виде словарей

Таблицы также могут использоваться для хранения информации, которая не индексируется численно или последовательно, как с массивами. Эти типы хранения иногда называют словарями, ассоциативными массивами, хэшами или отображением типы. Мы будем использовать термин словарь, где пара элементов имеет ключ и значение. Ключ используется для установки и получения значения, связанного с этим. Обратите внимание, что так же, как массивы, мы можем использовать таблицу [ключ] = значение формат для вставки элементов в таблицу. Ключ не должен быть числом, это может быть строка или, в этом отношении, почти любой другой объект Lua (кроме нуля или 0/0). Давайте построим таблицу с некоторым значением ключа пар в нем:

t = {apple = "green", orange = "orange", банан = "yellow"} для k, v попарно (t) сделать вывод (k, v) конец яблочно-зеленый оранжево-оранжевый бананово-желтый

из: http://lua -users.org / wiki / TablesTutorial

1 голос
/ 01 июня 2011

Для инициализации ассоциативного массива, в котором строковые ключи соответствуют строковым значениям, следует использовать

local petFamilies = {["Bat"]="Cunning",["Bear"]="Tenacity"};

но не

local petFamilies = {["Bat"]=["Cunning"],["Bear"]=["Tenacity"]};
...