Lua、table表的遍历过程中删除remove元素会出现的问题及解决
2014-03-19 11:50
639 查看
在table表中使用for迭代时,将符合条件的元素删除时,后面元素前移,然后产生跳跃
而且使用for i=1,#mytable 这样的循环时,由于在for时就已经确定了循环的终点是table的总长度,
在整个for运行过程中,终点不会改变。
所以当你删除元素时,在循环到i = #mytable 时,会报错nil。因为此时table长度已经缩短了。
那么该怎么遍历table时删除符合条件的元素呢。
网上查了一下,使用while可以。写了一个小测试例子:
达到预期效果、可行。
----------------------------------------------
第二种方式是新建一个表来存储原表中需要保留下来的元素,否则不保存
这样也可以达到删除原表中特定元素的效果,不过消耗了一定的内存,代码如下:
而且使用for i=1,#mytable 这样的循环时,由于在for时就已经确定了循环的终点是table的总长度,
在整个for运行过程中,终点不会改变。
所以当你删除元素时,在循环到i = #mytable 时,会报错nil。因为此时table长度已经缩短了。
那么该怎么遍历table时删除符合条件的元素呢。
网上查了一下,使用while可以。写了一个小测试例子:
local t = {} t[1] = 1 t[2] = 2 t[3] = 3 t[4] = 4 t[5] = 5 t[6] = 6 local i = 1 while i < #t do print(i) print(t[i].."\n------------------") if t[i] == 3 then print("删除操作、值:"..t[i]) print("\n------------------") table.remove(t,i) else i = i + 1 end end
达到预期效果、可行。
----------------------------------------------
第二种方式是新建一个表来存储原表中需要保留下来的元素,否则不保存
这样也可以达到删除原表中特定元素的效果,不过消耗了一定的内存,代码如下:
local t = {} local t_clone = {} t[1] = 1 t[2] = 2 t[3] = 3 t[4] = 4 t[5] = 5 t[6] = 6 local i = 1 local j = 1 for i,v in pairs(t) do print(i) print(t[i].."\n------------------") if t[i] == 3 then print("删除操作、值:"..t[i]) print("\n------------------") else t_clone[j] =t[i] j = j + 1 end i = i + 1 end --释放t表 t = nil for i=1,#t_clone do print(i.." = "..t_clone[i]) end
相关文章推荐
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结
- java中ArrayList使用remove删除元素时几种常见的问题及解决办法
- 集合遍历过程中删除集合元素问题
- 解决Python 遍历字典时删除元素报异常的问题
- lua table remove元素的问题
- 完美解决python遍历删除字典里值为空的元素报错问题
- 完美解决python遍历删除字典里值为空的元素报错问题
- 解决Python 遍历字典时删除元素报异常的问题
- c++ vector遍历删除元素 出错的问题
- Java如何在List或Map遍历过程中删除元素
- lua删除table中的多个元素
- 遍历List过程中删除元素的正确做法(转)
- 浅析Lua中table的遍历和删除
- iOS 数组遍历删除元素的问题
- java遍历Map时remove删除元素 分类: Android开发 2014-05-30 10:58 84人阅读 评论(0) 收藏
- 在遍历List的过程中删除元素
- 多线程14-遍历集合时删除元素问题分析
- HBase暴力删除HDFS数据后建表出现Table already exist问题的解决
- 遍历删除List中的元素,会报错? 用iterator.remove() 完美解决
- table布局, td内部元素溢出边界问题。 (已解决)