如何删除Lua表中的所有元素?我不想这样做:
t = {}
table.insert(t, 1)
t = {} -- this assigns a new pointer to t
Run Code Online (Sandbox Code Playgroud)
我想保留与t相同的指针,但删除其中的所有元素t.
我试过了:
t = {}
table.insert(t, 1)
for i,v in ipairs(t) do table.remove(t, i) end
Run Code Online (Sandbox Code Playgroud)
以上是否有效?还是需要其他东西?
cbz*_*cbz 35
for k in pairs (t) do
t [k] = nil
end
Run Code Online (Sandbox Code Playgroud)
也可以工作 - 如果整个表没有用作数组,你可能会遇到ipairs的困难.
gog*_*ing 16
表元素插入和删除性能比较
表大小计数为10000000
[1]而和rawset
while #t ~= 0 do rawset(t, #t, nil) end
Run Code Online (Sandbox Code Playgroud)
花费的时间= 0.677220
[2]接下来和rawset
for k in next, t do rawset(t, k, nil) end
Run Code Online (Sandbox Code Playgroud)
花费的时间= 0.344533
[3] ipairs和rawset
for i, v in ipairs(t) do t[i] = nil end
Run Code Online (Sandbox Code Playgroud)
花费的时间= 0.012450
[4] for,rawset
count = #t
for i=0, count do t[i]=nil end
Run Code Online (Sandbox Code Playgroud)
花费的时间= 0.009308
表elemnets插入
[1]表插入功能
for i=0, 10000000 do table.insert(t, i, i) end
Run Code Online (Sandbox Code Playgroud)
花费的时间= 1.0590489
[2]使用#t
for i=0, 10000000 do t[#t+1] = i end
Run Code Online (Sandbox Code Playgroud)
花费的时间= 0.703731
[3] for,rawset
for i=0, 10000000 do rawset(t, i, i) end
Run Code Online (Sandbox Code Playgroud)
花费的时间= 0.100010
结果.
最快删除:4
最快插入:3
jpj*_*obs 13
最简单,最高效的:
for k,v in pairs(tab) do tab[k]=nil end
Run Code Online (Sandbox Code Playgroud)
你建议的是不可用的:table.remove移动剩余的元素来关闭洞,从而弄乱桌子遍历.有关详细信息,请参阅下一个功能的说明