Как удалить таблицу из таблицы в Lua? - PullRequest
1 голос
/ 01 декабря 2009

Например:

items = {
    [753] = {
    },
    [192] = {
    },
    [789] = {
    },
    [791] = {
    },
    [790] = {
    },
    [776] = {
    },
}

Я хотел бы удалить 789 и все данные внутри него. Я попробовал оба: table.remove (шт., 2); и table.remove (предметы, 789); (Я не был уверен, как работает индексация) без удачи.

1 Ответ

7 голосов
/ 01 декабря 2009

Это так же просто, как

items[789] = nil

В Lua, если ключ в таблице имеет значение nil, значит, ключ не существует.

> t = { [5] = {}, [10] = {} }
> for k,v in pairs(t) do print(k,v) end
5       table: 0037CBC0
10      table: 0037CBE8
> t[5] = nil
> for k,v in pairs(t) do print(k,v) end
10      table: 0037CBE8

См. Также Progamming в Lua, раздел 2.5 . (Хотя онлайн-версия написана для Lua 5.0, это все равно относится к Lua 5.1)

... вы можете назначить nil для поля таблицы, чтобы удалить его.

Когда вы присваиваете nil своему индексу, это не явно удаляет то, что ранее было сохранено в этом индексе; но он уменьшает количество ссылок для того, что там хранилось, что потенциально делает его пригодным для сбора мусора.

...