看以下**:
local tbltest1 =
print(table.getn(tbltest1))
這段**輸出的結果是3,這個大家都知道,是吧。不管最後那個3後面有沒有加逗號,結果都是3。
再看下面的**:
local tbltest2 =
print(table.getn(tbltest2))
這段**輸出的結果是多少?這裡的輸出結果應該是2。首先,要明白,這個tbltest2不是乙個簡單的table,它混合了列表(list)和記錄(record)兩種風格,表中,a = 2是record風格。其次,要明白,record風格的record是不作為外表的長度計算(key值無法對應索引位置的才不計算)。你可以把它想象成乙個函式,跟其他物件導向語言一樣,函式是不記為內部變數的。
既然像函式一樣,那就可以輸出a的值,是的。print(tbltest2.a)就可以了。
key值對應索引,key值可以對應索引的比如像下面這個:
local tbltest =
print(table.getn(tbltest))
[1],[2],[3]可以對應索引位置,所以輸出3,如果key值不能對應索引,那麼結果往往是錯的,比如:
local tbltest =
print(table.getn(tbltest))
上面這個**的輸出結果是4,但是下面的這個是2,
local tbltest =
print(table.getn(tbltest))
另外,還有一種混搭風格,比如
local tbltest =
print(table.getn(tbltest))
3與[3]可以混搭,所以,這裡輸出的結果是3
還有乙個規則,就是當用列表風格的時候,每次都是先尋找[1]所在的位置然後才開始計算的。。。。其實可以理解為先找到1,然後排序,之後再計算長度~~~
建議不要在table中混合recrod和list風格,然後計算長度,除非你對他們之間的規則非常清楚,另外,列表風格中的key如果不是數字,也不會進行計算~~~
再看下面的**:
local tbltest3 =
, 3,
}print(table.getn(tbltest3))
這段**輸出的結果是多少?這裡的輸出結果應該是3。要注意,表巢狀表,巢狀表也是元素。所以,輸出的結果是3。
以下情況相當糾結,可直接看最後一句話總結:
現在來看乙個比較糾結的:
local tbltest4 =
print(table.getn(tbltest4))
這段**輸出的結果是多少?是1。我們都知道table獲取長度的時候,會遍歷一下整個表,在最後乙個非nil處,就會返回。
但是,下面這段**呢?
local tbltest5 =
print(table.getn(tbltest5))
上面這段**,結果如下:
好玩吧?它把nil也當成元素計算長度了。但叫你摸不著頭腦的是下面這段**:
看到沒,這段**的結果是1。再發一段,讓你完全蒙掉:
看,這段**輸出結果是3,蒙了沒?再看,這一段叫你以後再也不敢再table中寫nil值:
看看吧,這一段的輸出結果是1。親,請問,你以後還敢在lua的table中用nil值嗎???如果你繼續往後面加nil,你可能會發現點什麼。你可能認為你發現的是個規律。但是,你千萬不要認為這是個規律。因為這是錯誤的。
1、在table中不要使用nil
2、如果非要使用nil,必須用table.setn()函式去設定這個table表的長度。注意:新版本的lua已經不支援setn了。
必須給你個結論:
setn函式已過時,不要在lua的table中使用nil值,如果乙個元素要刪除,直接remove,不要用nil去代替。
lua中獲取table長度的問題
官方文件是這麼描述 的 取長度操作符寫作一元操作 字串的長度是它的位元組數 就是以乙個字元乙個位元組計算的字串長度 tablet的長度被定義成乙個整數下標n。它滿足t n 不是nil而t n 1 為nil 此外,如果t 1 為nil,n就可能是零。對於常規的陣列,裡面從 1 到n放著一些非空的值的時...
Lua中table的長度
官方文件是這麼描述 的 取長度操作符寫作一元操作 字串的長度是它的位元組數 就是以乙個字元乙個位元組計算的字串長度 table t 的長度被定義成乙個整數下標 n 它滿足 t n 不是nil而 t n 1 為nil 此外,如果 t 1 為nil,n 就可能是零。對於常規的陣列,裡面從 1 到 n 放...
lua中求table長度
關於lua table介紹,看以前的文章 官方文件是這麼描述 的 取長度操作符寫作一元操作 字串的長度是它的位元組數 就是以乙個字元乙個位元組計算的字串長度 tablet的長度被定義成乙個整數下標n。它滿足t n 不是nil而t n 1 為nil 此外,如果t 1 為nil,n就可能是零。對於常規的...