lua -- 使用remove删除table数据

来源:互联网 发布:嫁コレ数据提取资料 编辑:程序博客网 时间:2024/06/18 18:51

在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)    endendfor 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)    endendfor 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    endend-- 删除数据是否符合条件-- @param data 要删除的数据-- @return 返回是否符合删除data条件local function removeCondition(data)    -- body    -- TODO data 符合删除的条件    return trueend

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