Как получить количество записей в таблице Lua?

Походит "позволенный меня, гуглят его для Вас" вопрос, но так или иначе я не могу найти ответ. Lua # оператор только считает записи с целочисленными ключами и так делает table.getn:

tbl = {}
tbl["test"] = 47
tbl[1] = 48
print(#tbl, table.getn(tbl))   -- prints "1     1"

count = 0
for _ in pairs(tbl) do count = count + 1 end
print(count)            -- prints "2"

Как я получаю количество всех записей, не считая их?

120
задан Roman Starkov 24 April 2010 в 19:10
поделиться

3 ответа

У вас уже есть решение вопроса - единственный способ - перебрать всю таблицу с парами (..) .

function tablelength(T)
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end

Также обратите внимание, что определение оператора "#" немного сложнее этого. Позвольте мне проиллюстрировать это, взяв эту таблицу:

t = {1,2,3}
t[5] = 1
t[9] = 1

Согласно руководству, любые из 3, 5 и 9 являются допустимыми результатами для #t . Единственный разумный способ его использования - это массивы из одной непрерывной части без значений nil.

117
ответ дан 24 November 2019 в 01:41
поделиться

Вы можете настроить мета-таблицу для отслеживания количества записей, это может быть быстрее, чем итерация, если эта информация требуется часто.

19
ответ дан 24 November 2019 в 01:41
поделиться

Есть один способ, но он может вас разочаровать: использовать дополнительную переменную (или одно из полей таблицы) для хранения счетчика и увеличивать его каждый раз делаешь прошивку.

count = 0
tbl = {}

tbl["test"] = 47
count = count + 1

tbl[1] = 48
count = count + 1

print(count)   -- prints "2"

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

2
ответ дан 24 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: