如何删除Lua表中的所有元素?

bob*_*bob 23 lua lua-table

如何删除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移动剩余的元素来关闭洞,从而弄乱桌子遍历.有关详细信息,请参阅下一个功能的说明