lua 中为了批量删除 元素 我写了如下代码
m={1,2,3,4,5,6}t={3,4}我要把t中的元素在m中删掉我写了如下代码functionshanchu(d,f)--l为删除组s为被删除组localw=dlo...
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呢? 展开
我要把 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呢? 展开
2个回答
展开全部
首先 你要知道 非泛型for循环在循环开始的时候,就已经确定了这个循环会运行多少次
比如你的table m长度是6 那么你这个循环就会运行6次
在运行的过程中 如果你remove了一个值 那么你下次就必然会漏过一个
访问第一个
访问第二个 删除第二个
访问第三个
访问第四个
以上是你希望的
但实际运行的时候
访问第一个
访问第二个 删除第二个
访问第四个
访问超范围的第五个
-----------------
这是实际运行起来的效果
所以你要注意一下下标的访问
方法一,不用for 改用while
方法二,新建一个表 ,用于存放结果
比如你的table m长度是6 那么你这个循环就会运行6次
在运行的过程中 如果你remove了一个值 那么你下次就必然会漏过一个
访问第一个
访问第二个 删除第二个
访问第三个
访问第四个
以上是你希望的
但实际运行的时候
访问第一个
访问第二个 删除第二个
访问第四个
访问超范围的第五个
-----------------
这是实际运行起来的效果
所以你要注意一下下标的访问
方法一,不用for 改用while
方法二,新建一个表 ,用于存放结果
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询