如何刪除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