lua之table與#與nil凌亂組合

寫在前面

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í)在是任性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容