Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

как удалить запись из таблицы


icreator

Рекомендуемые сообщения

если в таблице все индексы - строковые??

Code:
---- должна удалять строку из таблицы но не удаляет (

function removeRow(t, key)

researchObj("",t)

local i = 0

for k, _ in pairs(t) do

if k == key then

LogInfo("removing ", k)

table.remove (t,i)

end

i = i + 1

end

researchObj(" --- ",t)

end

Ссылка на комментарий
Поделиться на другие сайты

table.remove() работает ТОЛЬКО с теми таблицами, которые обслуживаются исключительно с помощью table.insert() и table.remove(). Дело в том, что в Lua, на самом деле, таблица может быть устроена по-разному. Если таблицу формируют ТОЛЬКО с помощью table.insert() и table.remove(), то такая таблица представляет из себя очень простой и быстрый, классический массив (с числовыми индексами от 1 и далее), и работает очень быстро, почти как массивы в языке Си.

Но, когда нужно использовать какие-то другие индексы (например, строки), или числа, но не по порядку (например, ID игроков) то таблицу создают БЕЗ помощи этих двух функций. Новые элементы таблицы создаются так: Таблица [ Индекс ] = Значение, а удаляются так: Таблица [ Индекс ] = nil В таких случаях, таблица уже НЕ обычный массив, а ассоциативный массив - совсем другая, более сложная структура, в которой индексами может служить чуть ли не всё что угодно.

Кстати, если пользователь создавал массив с помощью table.insert(), а потом, внезапно, влез грязными ручками, и вставил такой индекс, какие вставляются только в ассоциативные массивы, то Lua "на лету", незаметно, сконвертирует этот классический массив в ассоциативный массив. Это Lua умеет. Но никогда не будет обратного пути - ассоциативный массив навсегда останется таковым.

Code:
function removeRow(t, key)

t [ key ] = nil

end

Ссылка на комментарий
Поделиться на другие сайты

спасибо. а я просто стала новый массив создавать с переприсваиванием.. может и зря

Code:

---- создает новуб стабицу - без одной строки, найденой по ключу

function removeRow(t, key)

local tNew = {}

for k, v in pairs(t) do

if k ~= key then

tNew [k]  = v

end

end

return tNew

end

Ссылка на комментарий
Поделиться на другие сайты

Вот это, совершенно точно, зря. Так аддон делает совершенно лишнюю и ненужную работу.

Убери-ка ты лучше эту функцию, а вместо всех её вызовов

Code:
removeRow( таблица, индекс )

напиши так:

Code:
таблица [ индекс ] = nil
Ссылка на комментарий
Поделиться на другие сайты

про nil = вроде как не удаляется само поле... судя по этому:

Quote:

2.9.2 - Weak Tables

A weak table is a table whose elements are weak references. A weak reference is ignored by the garbage collector. In other words, if the only references to an object are weak references, then the garbage collector will collect that object.

A weak table can have weak keys, weak values, or both. A table with weak keys allows the collection of its keys, but prevents the collection of its values. A table with both weak keys and weak values allows the collection of both keys and values. In any case, if either the key or the value is collected, the whole pair is removed from the table..

тоесть поле будет уничтожено но не сразу.. понятно в принципе

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования