lua删除table中的多个元素
来源:互联网 发布:软件系统升级方案 编辑:程序博客网 时间:2024/05/29 06:56
很多时候,我们有这样的需求:删除table中若干符合条件的元素,最原始的想法就是用for遍历一边table,符合条件的用table.remove就可以了
function test1(t) for i , v in ipairs(t) do if v.id%3 == 0 then table.remove(t ,i) end endend
结果证明这是不行的,因为table.remove删除第i元素后,i后面的元素会向前补齐,这样删除前处于i+1的元素就变成了i元素,然后for循环从t中取第i+1个元素,这样就漏掉了第i+1个元素,既然这样不行,很自然的就想到用while循环,可以自由控制“遍历的指针”是否前进,有删除操作,就不前进,否则才前进
代码如下
function test2(t)local int i =1while(t[i]) doif t[i].id%3 == 0 thentable.remove(t , i)elsei = i + 1endendend
跑一下,很正常!
但是注意table.remove是删除队列中的一个元素,每一次操作都要移动大量元素,性能不会太好,因此可以考虑用临时的table,用来保存没有被删除的元素,最后再让t指向这个table,以空间来换时间,而实际使用中,t中的元素往往是table类型,这样临时的table中只会保存元素的引用,因此占用的空间几乎可以忽略不计。
代码如下
function test3(t)local newT = {}for i ,v in ipairs(t) doif v.id%3 ~= 0 thentable.insert(newT , v)endendt= newTend
很好奇test3()到底比test2()快多少呢,我测试了一下
t = {}local n = 10000for i = 1,n dotable.insert(t ,{id = i})end
n是10000的情况下:
test2耗时0.234s
test3耗时0.002s
相差非常大。
结论:
删除table中的多个元素,在table较大,且删除操作较频繁时,切忌使用table.remove
0 0
- lua删除table中的多个元素
- lua 中删除table中的多个元素
- lua table 元素删除
- lua 删除key,value table中指定元素
- 动态增加和删除table中的元素。
- Lua-计算表中有多少个元素-#table的用法
- Java中如何删除一个集合中的多个元素
- java 中,循环删除list中的多个元素实现
- Java中如何删除一个集合中的多个元素
- Java中如何删除一个集合中的多个元素
- lua中删除元素
- lua中删除元素
- 【Lua】Lua中的Table操作
- 【lua】Lua中的table函数库
- LUA中的TABLE函数库
- LUA中的TABLE函数库
- Lua中的table函数库
- LUA中的TABLE函数库
- Qt移动应用开发(四):应用粒子特效
- 非官方的规范的
- 大概啥地方噶萨斯
- Query Cache
- floyd—warshall
- lua删除table中的多个元素
- 阿斯顿噶发送到
- 是的范德萨
- 如何让外网访问自己的本地Web服务器
- 阿斯顿发生嘎斯嘎斯
- 卫哲的3+1思考法:测量项目“靠谱程度”
- 字符串模式匹配(BF算法和KMP算法)
- 北京微信功能开发给传统行业带来的变革
- 流程图绘制控件、图表和仪表控件、日历日程安排控件、报表控件包MindFusion.WinForms Pack