1. 程式人生 > >關於”#”操作符在lua中table的運用

關於”#”操作符在lua中table的運用

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 上提的問題:
http://stackoverflow.com/questions/29248727/use-operator-to-calculate-the-length-of-a-table-in-lua