lua -- 使用remove删除table数据

在Lua语言中,一切皆是table,所有数据,函数都保存在table中,但是当我们使用了table后,该如何清理table表中数据呢。
先看一个函数:
table.remove(table[,pos]):删除在pos位置上的元素,后面的元素会向前一栋,然后删除的index会向前移动,导致删除后的数据不是你想要的。当不填入pos时,删除table末尾的数据。
看如下代码:

local array = {"a","a","a","b","a","a","b"}
for i,v in ipairs(array) do
    if v == "a" then
        table.remove(array, i)
    end
end
for i,v in ipairs(array) do
    print(i,v)
end

输出结果:
这里写图片描述
上面我们想要删除table表中所有“a”数据,但是输出结果并没有将所有“a”数据删除。所以我们想连续删除表中数据不能这样使用,下面是正确删除方法。

local array = {"a","a","a","b","a","a","b"}
for i=#array,1,-1 do
    if array[i] == "a" then
        table.remove(array, i)
    end
end
for i,v in ipairs(array) do
    print(i,v)
end

这样就能得到正确的删除结果了。
所以我们可以封装一个函数


-- 删除table表中符合conditionFunc的数据
-- @param tb 要删除数据的table
-- @param conditionFunc 符合要删除的数据的条件函数
local function table.removeTableData(tb, conditionFunc)
    -- body
    if tb ~= nil and next(tb) ~= nil then
        -- todo
        for i = #tb, 1, -1 do
            if conditionFunc(tb[i]) then
                -- todo
                table.remove(tb, i)
            end
        end
    end
end

-- 删除数据是否符合条件
-- @param data 要删除的数据
-- @return 返回是否符合删除data条件
local function removeCondition(data)
    -- body
    -- TODO data 符合删除的条件
    return true
end

我们只需要将TODO写完,并且将table传入即可。

你可能感兴趣的:(Lua)