如何删除Lua表中的所有元素?我不想做的事:如何删除Lua表中的所有元素?
t = {}
table.insert(t, 1)
t = {} -- this assigns a new pointer to t
我要保持相同的指针吨,但内t
删除所有元素。
我想:
t = {}
table.insert(t, 1)
for i,v in ipairs(t) do table.remove(t, i) end
就是上面是否有效?或者还有其他需要的东西?
如何删除Lua表中的所有元素?我不想做的事:如何删除Lua表中的所有元素?
t = {}
table.insert(t, 1)
t = {} -- this assigns a new pointer to t
我要保持相同的指针吨,但内t
删除所有元素。
我想:
t = {}
table.insert(t, 1)
for i,v in ipairs(t) do table.remove(t, i) end
就是上面是否有效?或者还有其他需要的东西?
for k in pairs (t) do
t [k] = nil
end
也将工作 - 你可能有ipairs困难,如果表不作为整个数组。
最简单,最高效的:
for k,v in pairs(tab) do tab[k]=nil end
你所说的其实是不可用:table.remove
转移剩余的元素关闭孔,从而搅乱表遍历。见the next function说明更多信息
对于忽略__pairs
元方法更快的版本:
local next = next
local k = next(tab)
while k ~= nil do
tab[k] = nil
k = next(tab, k)
end
编辑:由于@siffiejoe提到的意见,这可以通过使用其默认更换pairs
呼叫被简化回到一个for循环表的返回值:next
方法和表本身。此外,为了避免所有的元方法,使用rawset
方法表索引分配:
for k in next, tab do rawset(tab, k, nil) end
或者只是`对于下一个k,tab do tab [k] = nil end` – siffiejoe 2014-12-04 08:47:51
#table
是表大小等,如果t = {1,2,3}
然后#t = 3
所以,你可以使用此代码删除元素
while #t ~= 0 do rawset(t, #t, nil) end
您将浏览表格并删除每个元素,最后得到一个空表。
表元素插入和移除 性能比较
台尺寸计数千万
[1]而与rawset
while #t ~= 0 do rawset(t, #t, nil) end
花费的时间= 0.677220
[2]下一个和rawset
for k in next, t do rawset(t, k, nil) end
花费的时间= 0.344533
[3] ipairs和rawset
for i, v in ipairs(t) do t[i] = nil end
花费的时间= 0。012450
[4],rawset
count = #t
for i=0, count do t[i]=nil end
花费的时间= 0.009308
表elemnets插入
[1]表插入功能
for i=0, 10000000 do table.insert(t, i, i) end
花费的时间= 1.0590489
[2] #T
for i=0, 10000000 do t[#t+1] = i end
花费的时间使用= 0.703731
[3],rawset
for i=0, 10000000 do rawset(t, i, i) end
花费的时间= 0.100010
结果。
最快删除:4
最快插入:3
我想情况是清空一个表中把它作为一个参数的函数。那么这个问题很好,+1。我最初对“指针”一词感到困惑,它存在于C代码中,不应在Lua代码中提及。你的意思是“参考”或其他。 – AndersH 2011-02-03 21:13:55