首先,先看乙個「#」運用的例子:
tags =
tags[#tags+1] = 4
這裡表示在表tags最後,插入元素4,因此表tags元素個數將會為4。
在lua中「#」表示返回表長度,類似c+中的getlen()函式,不過,對於「#」操作,有幾點需要注意。
1. 只有當鍵值是連續的數值鍵值時,返回值才是有意義的。
例如 local t = ,這裡table t的鍵值是1, 2,因此#t返回值為2
如果,table t這樣定義 local t = ,其鍵值分別為」a」、」b」,不是數值,因此#t 放回為0,這個值其實沒有任何意義,在不同平台上,可能返回數值不一樣。
2. 當table中,存在nil時,#返回的數值也是無意義。
這裡網上有些資料是說,遇到nil時,會自動停止計算table長度,其實是不對的,可以看下面2個例子:
local t = ;
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 上提的問題:
關於C C 中的點操作符和箭頭操作符
ps 話說以前竟然一直沒有關注到這個問題啊。不應該啊。今天查了點資料,加上自己寫code的體會,說下一下,作為記錄吧。先概括一下 點操作符 用來引用普通物件。箭頭操作符 用來引用指標物件。舉例子說明一下 比如,我有乙個物件darkray。那麼我可以通過 來呼叫darkray類中中的成員變數。但是如果...
關於UNPIVOT 操作符
簡而言之,unpivot操作符就是取得乙個行的資料集合,然後把每一行都轉換成多個行資料。為了更好地理解,請看下圖 圖1從上圖中,你能發現unpovot操作符,取得了兩行資料,每行包含三個price值,然後將這些轉化成6行資料,其中每個產品 都是乙個不同的行。unpivot 命令制定了兩個不同的列型別...
關於UNPIVOT 操作符
簡而言之,unpivot操作符就是取得乙個行的資料集合,然後把每一行都轉換成多個行資料。為了更好地理解,請看下圖 圖1從上圖中,你能發現unpovot操作符,取得了兩行資料,每行包含三個price值,然後將這些轉化成6行資料,其中每個產品 都是乙個不同的行。unpivot 命令制定了兩個不同的列型別...