一般來說是獲得一個table的長度(即元素數),但這個運算子實際上陷阱很多
#的實際作用是獲得一個table中最大的數字鍵值,比如:
t = {"a", "b", "c", "d"}
#t --輸出是4
而tags[#tags+1]=tag就是一個常見的用法,在tags這個table的末端插入一個新元素tag
但由於上面說的,#僅對鍵值連續的數值鍵值有效,因此
1、當鍵值為字串等其他型別時,該運算子返回的值無法確認,比如
t = { x = "a", y = "b", z = "c"}
#t --輸出是0
2、當鍵值為數值但不連續時,比如:
t = {"a", "b", "c"}
#t -- 同第一個範例,此時正常為3
t[5] = "e"
#t --此時輸出依然為3,因為t[4]為nil,計數到3處停止。
綜上,如果你的table是純粹當一個連續的陣列在用,那麼#t是很方便的獲得table長度的方法;但如果你的table中key的數值不連續,或者有其他型別的key那麼還是不要指望#能給出多有意義的結果來。
一般來說是獲得一個table的長度(即元素數),但這個運算子實際上陷阱很多
#的實際作用是獲得一個table中最大的數字鍵值,比如:
t = {"a", "b", "c", "d"}
#t --輸出是4
而tags[#tags+1]=tag就是一個常見的用法,在tags這個table的末端插入一個新元素tag
但由於上面說的,#僅對鍵值連續的數值鍵值有效,因此
1、當鍵值為字串等其他型別時,該運算子返回的值無法確認,比如
t = { x = "a", y = "b", z = "c"}
#t --輸出是0
2、當鍵值為數值但不連續時,比如:
t = {"a", "b", "c"}
#t -- 同第一個範例,此時正常為3
t[5] = "e"
#t --此時輸出依然為3,因為t[4]為nil,計數到3處停止。
綜上,如果你的table是純粹當一個連續的陣列在用,那麼#t是很方便的獲得table長度的方法;但如果你的table中key的數值不連續,或者有其他型別的key那麼還是不要指望#能給出多有意義的結果來。