關於”#”操作符在lua中table的運用
阿新 • • 發佈:2019-01-27
DionysosLai 2015/03/26
首先,先看一個“#”運用的例子:
tags = {1, 2, 3}
tags[#tags+1] = 4
這裡表示在表tags最後,插入元素4,因此表tags元素個數將會為4。
在lua中“#”表示返回表長度,類似c+中的getlen()函式,不過,對於“#”操作,有幾點需要注意。
1. 只有當鍵值是連續的數值鍵值時,返回值才是有意義的。
例如 local t = {“a”, “b”},這裡table t的鍵值是1, 2,因此#t返回值為2
如果,table t這樣定義 local t = { a = “a”, b = “b”},其鍵值分別為”a”、”b”,不是數值,因此#t 放回為0,這個值其實沒有任何意義,在不同平臺上,可能返回數值不一樣。
2. 當table中,存在nil時,#返回的數值也是無意義。
這裡網上有些資料是說,遇到nil時,會自動停止計算table長度,其實是不對的,可以看下面2個例子:
local t = {“a”, nil, “b”};
local t1 = {};
t1[1] = “a”;
t1[2] = nil;
t1[3] = “b”;
print(#t); —- 返回3
print(#t1); —- 返回1
這裡,可以看出一些貓膩。
綜上兩點,只有當table的鍵值是連續數值時,#返回值才是有意義的。如果在table中,存在非數值鍵值,或者nil時,其table並不是一個序列,因此#table並未定義,其返回值就是無意義,也就是說#table值可能在不同的平臺上,返回值不一樣。
詳細,可以參閱筆者在Stack Overfl 上提的問題: