在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传入即可。