Lua таблицы - это другой вид конструкции, чем в других языках.Как указано в руководстве Lua :
Таблицы являются основным (фактически единственным) механизмом структурирования данных в Lua и мощным.Мы используем таблицы для представления простых массивов, таблиц символов, наборов, записей, очередей и других структур данных простым, единообразным и эффективным способом.
Кроме того, таблица достаточно динамична, чтобыВы можете использовать его несколькими способами одновременно.Например, таблица может использоваться одновременно как массив и как карта.Это имеет некоторые печальные последствия внутри страны.Внутри каждая таблица Lua состоит из двух частей: массива и хэш-карты.
Оператор длины работает только с частью массива таблицы;дополнительная память не используется для хранения общего количества элементов в таблице, включая часть карты хеша.Если эта функциональность желательна, она должна быть реализована вручную.Пара хороших способов сделать это - использовать геттеры и сеттеры, вручную обновлять локальный счетчик или использовать прокси-таблицу с метаметодами index и newindex.
В качестве примечания, которое может заинтересовать, иногда бывает трудно сказать,если значение хранится в массиве или хеш-частях таблицы.Рассмотрим эти примеры в Lua 5.3:
1: t = {true, nil, true} -- #t = 3
2: t = {true, [2] = true} -- #t = 2
3: t = {true, [3] = true} -- #t = 1
4: t = {true, true, true} t[2] = nil -- #t = 3