Очистка таблицы альтернатив в Lua - PullRequest
2 голосов
/ 11 февраля 2020

Я хочу очистить стол, но не уверен, какой путь лучше и чем отличается друг от друга. Каковы различия между этими:

tbl = {}
for k, v in pairs(tbl) do v = nil end
for k, v in pairs(tbl) do tbl[k] = nil end

Спасибо.

1 Ответ

3 голосов
/ 11 февраля 2020
tbl = {}

Это не столько очистит таблицу, сколько просто создаст новую. Старый может получить сборщик мусора, в зависимости от того, есть ли другие ссылки на него.

for k, v in pairs(tbl) do v = nil end

Это абсолютно ничего не делает. Это пустая трата вычислительной мощности.

for k, v in pairs(tbl) do tbl[k] = nil end

Это фактически очищает таблицу без создания новой. Для небольших таблиц это часто более производительно, чем создание новой таблицы, так как это означает, что для G C требуется меньше работы, но это несколько более продвинутый метод оптимизации, и это не значит, что очистка таблиц всегда лучше.

Обратите внимание, что pairs использует функцию next, которая может обрабатывать ключи, удаляемые во время итерации.

...