lua遍历删除方法效率比较
lua中表遍历删除的安全方法
一般有:
- 从后往前remove
- 建新表
local tb = {}
for i = 1, 10000, 1 do table.insert(tb, i) end
local s = os.clock()
for i = #tb, 1, -1 do if tb[i] % 2 == 0 then table.remove(tb, i) end end
local e = os.clock()
print(e - s)
tb = {}
for i = 1, 10000, 1 do table.insert(tb, i) end
s = os.clock()
local flag = {}
for i = #tb, 1, -1 do if tb[i] % 2 == 0 then table.insert(flag, i) end end
local ntb = {}
for _, i in pairs(flag) do table.insert(ntb, tb[i]) end
tb = ntb
ntb = nil
e = os.clock()
print(e - s)
结果:
0.121788
0.002064
分析与结论
remove会使表后面所有元素往前移, 会造成大量算力浪费, 规模较大时不推荐
第二中方法新建了表, 但这个代价相比移动大量元素还是很小的, 推荐使用这种方法