从Lua表中删除特定条目

我正在像这样插入表格

Admin = {}

table.insert(Admins,{id = playerId,Count = 0})

这很好用。

现在我要从该表中删除特定的管理员,怎么办?

以下代码不起作用,我确定这是因为ID存储在表格中的数组中,但我如何访问它?

table.remove(Admins,playerId)

基本上, 我想从表格Admins中删除ID == playerId的条目。

点赞
用户5525442
用户5525442

有两种方法从表中移除条目,两种方法都是可接受的:

1. myTable[index] = nil

从给定的索引中删除条目,但通过保持索引创建一个空洞

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}
2018-10-22 05:09:57