lua 中为了批量删除 元素 我写了如下代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua 中为了批量删除 元素 我写了如下代码相关的知识,希望对你有一定的参考价值。

m = 1,2,3,4,5,6 t = 3,4
我要把 t中的元素在m中删掉 我写了如下代码
function shanchu(d,f) --l为删除组 s为被删除组
local w = d
local v = f
if(table.getn(w) < table.getn(v))then
for n = 1,table.getn(w) do
for i = 1,table.getn(v) do
if(w[n] == v[i])then
table.remove(w,n)
table.remove(v,i)
break
end
end
end

if(table.getn(w) == 0)then
return v
else
shanchu(w,v)
end
end
end

处理之后为什么不能返回得到的table呢?

首先 你要知道 非泛型for循环在循环开始的时候,就已经确定了这个循环会运行多少次
比如你的table m长度是6 那么你这个循环就会运行6次
在运行的过程中 如果你remove了一个值 那么你下次就必然会漏过一个
访问第一个
访问第二个 删除第二个
访问第三个
访问第四个

以上是你希望的
但实际运行的时候

访问第一个
访问第二个 删除第二个
访问第四个
访问超范围的第五个
-----------------
这是实际运行起来的效果
所以你要注意一下下标的访问
方法一,不用for 改用while
方法二,新建一个表 ,用于存放结果
参考技术A 不懂意思

sh [LUA] Redis批量/批量操作脚本(重命名,删除)

# Bulk deletes keys start with "prefix"  
EVAL "for i, name in ipairs(redis.call('KEYS', 'prefix*')) do redis.call('DEL', name); end" 0

# Bulk renames keys start with "prefix" to "postfix". 
# e.g. prefixwithtail -> postfixwithtail
EVAL "for i, name in ipairs(redis.call('KEYS', 'prefix*')) do local x = string.gsub(name, 'pre', 'post'); redis.call('RENAME', name, x); end" 0

以上是关于lua 中为了批量删除 元素 我写了如下代码的主要内容,如果未能解决你的问题,请参考以下文章

在 LINQ to Entities 中批量删除

sh [LUA] Redis批量/批量操作脚本(重命名,删除)

StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改

Azure DevOps Server:使用Postman批量删除测试用例

Azure DevOps Server:使用Postman批量删除测试用例

mybatis批量删除foreach报错