Удалить конкретную запись из таблицы Lua
Я вставляю в таблицу, как это
Admin = {}
table.insert(Admins, {id = playerId, Count = 0})
И это прекрасно работает.
Как мне удалить этого конкретного администратора из этой таблицы сейчас?
Следующее не работает, и я уверен, что это потому, что ID хранится в массиве, который находится внутри таблицы, но как мне тогда получить к нему доступ?
table.remove(Admins, playerId)
В основном, я хочу удалить из таблицы Admins, где ID == playerId, который я ввожу.
1 ответ
Решение
Существует два подхода для удаления записи из таблицы, оба являются приемлемыми способами:
1. myTable [index] = ноль
Удаляет запись из данного индекса, но добавляет отверстие в таблицу, поддерживая индексы
local Admins = {}
table.insert(Admins, {id = 10, Count = 0})
table.insert(Admins, {id = 20, Count = 1})
table.insert(Admins, {id = 30, Count = 2})
table.insert(Admins, {id = 40, Count = 3})
local function removebyKey(tab, val)
for i, v in ipairs (tab) do
if (v.id == val) then
tab[i] = nil
end
end
end
-- Before
-- [1] = {['Count'] = 0, ['id'] = 10},
-- [2] = {['Count'] = 1, ['id'] = 20},
-- [3] = {['Count'] = 2, ['id'] = 30},
-- [4] = {['Count'] = 3, ['id'] = 40}}
removebyKey(Admins, 20)
-- After
-- [1] = {['Count'] = 0, ['id'] = 10},
-- [3] = {['Count'] = 2, ['id'] = 30},
-- [4] = {['Count'] = 3, ['id'] = 40}
2. table.remove(myTable, index)
Удаляет запись из заданного индекса и перенумеровывает индексы.
local function getIndex(tab, val)
local index = nil
for i, v in ipairs (tab) do
if (v.id == val) then
index = i
end
end
return index
end
local idx = getIndex(Admins, 20) -- id = 20 found at idx = 2
if idx == nil then
print("Key does not exist")
else
table.remove(Admins, idx) -- remove Table[2] and shift remaining entries
end
-- Before is same as above
-- After entry is removed. Table indices are changed
-- [1] = {['id'] = 10, ['Count'] = 0},
-- [2] = {['id'] = 30, ['Count'] = 2},
-- [3] = {['id'] = 40, ['Count'] = 3}