寫在前面
lua是在unity3d前端開發(fā)中經(jīng)常被用到的語言,因為其輕量和熱更新的特性深受歡迎,招聘信息中也經(jīng)常會看到“會使用lua的優(yōu)先”這樣的字樣。。。迫不得已,深夜擼教程。然而。。。table的長度問題讓我很是糾結(jié)。
坑點(diǎn)一 : record模式的項不被計入長度
啥意思呢,看下面這個表
table1 = {
"1",
a = "2",
"3"
}
print(#table1)
emmmm,輸出的長度是2,驚不驚喜!
原來,table的項分為list(列表)風(fēng)格和record(記錄)風(fēng)格,table1中的"1""3"都是list風(fēng)格,而a="2"是記錄風(fēng)格。所以,#table只計算了兩個長度。
同樣的,下面兩個table的#輸出也是0
table2={a="1",b="2",c="3"}
print(#table2) --[[結(jié)果是0]]
table3 = {}
table3["1"] = "1"
table3["2"] = "2"
print(#table3) --[[結(jié)果是0]]
而下面這個table又有些特殊,table里嵌套一個table
table4 = {
"1",
{a="2"},
"3"
}
print(#table4) --[[結(jié)果為3]]
嵌套中的表{a="2"}被視為一個元素,計入長度,因此輸出為3
坑點(diǎn)二:深坑之在table中使用nil
這次我先貼出下面的代碼
t1 = {nil}
t2 = {1,nil,2}
t3 = {1,nil,2,nil}
t4 = {1,nil,2,nil,3}
t5 = {1,nil,2,nil,3,nil}
t6 = {1,nil,2,nil,3,nil,nil}
print(#t1,#t2,#t3,#t4,#t5,#t6)
--[[0 3 1 5 3 5]]
輸出結(jié)果也放在代碼最后了,看了之后是不是覺得因缺思廳(interesting)呢。。。
好吧,結(jié)論就是:
不要在table中使用nil!
不要在table中使用nil??!
不要在table中使用nil!??!
那么怎么刪除table中的值呢?那就直接remove吧~
ps:有小伙伴跟我講,一定要在table里面存些奇怪的東西,而且一定要去獲取table的長度,emmmm,好吧,你調(diào)皮你贏了,給出一個方法,我們可以用迭代器來實(shí)現(xiàn)獲取這個長度:
function table_leng(t)
local leng=0
for k, v in pairs(t) do
leng=leng+1
end
return leng;
end
通過以上代碼,通過pairs迭代器,我們可以“數(shù)”出table的真正長度~
獲取個長度都要遍歷,也實(shí)在是任性。