Lua 中的Table元素刪除主要有兩種方法:
1、將字段賦值為 nil
2、使用Table庫里的 table.remove(table, index)
下面着重講解兩種方法
1 table.remove
先來看一下這個庫函數的函數原型:
table.remove(table, pos)
@table:要刪除的表
@pos: 要刪除表元素的位置,這個參數可選,如果不傳的話, 默認為table的長度,即從表最后一個元素刪起
local t = {10, 20, 30, 40,50, 60}
table.remove(t, 3)
for k,v in pairs (t) do
print("t", k, v)
end
結果:
可以看到,第3個元素30已經找不到了!
除此之外,還可以看到, 后面的40,50,60分別往前移了一位
由此,千萬記得不要在循環中多次使用table.remove(),如果一定要用,謹慎測試!
2 賦值為 nil
以下面這段代碼為實驗環境
local t =
{
[10] = 1,
[20] = 2,
[30] = 3,
[40] = 4,
[50] = 5,
[60] = 6
}
如果用table.remove()的話,pos的位置根本不好找,因為Lua內部非數組排序是根據hash值來的
對於這種pos不好找的表結構,可能賦值為nil相當方便,
假設我要刪除t[30],
只需要
t[30] = nil
for k,v in pairs (t) do
print("t", k, v)
end
結果為
可以看到, 已經找不到 t[30],3了
當然,賦值為nil不僅僅只能用來刪除Table的元素,它可以用來刪除任何變量!