Lua程序設計 table(表)

     Table是Lua中主要數據結構機制,基於Table,能夠以一種簡單、統一和高效的方式來表示普通數組、符號表、集合、記錄、隊列和其餘數據結構。Table是沒有固定大小的,能夠動態地添加任意數量的元素到一個Table中。數組

      Lua中的table類型實現了「關聯數組」。能夠在「關聯數組」中使用整數、字符串或其餘類型的值(nil除外)來索引它。數據結構

      在Lua中,Table既不是「值」也不是「變量」,而是「對象」。能夠將一個Table想象成一種動態分配的對象,程序僅支持有一個對它的引用(或指針),Lua不會暗中生成Table的副本或建立新的Table。能夠經過「構造表達式」完成Table表的建立,最簡單的構造表達式就是{}。函數

a = {}   --建立一個table,並將它的引用存儲到a
k = "X"
a[k] = 10  ---新條目,key = "X" , value = 10
print(a["X"])    --->10

a[20] = "great"  -- 新條目,key = 20, value = "great"
k = 20
print(a[k])      -->"great"
a["X"] = a["X"] + 1
print(a["X"])   --- > 11

  Table 永遠是"匿名的",一個持有Table的變量與Table自身之間沒有固定的關聯性。lua

a = {}
a["X"] = 10
b = a          --- b與a引用了同一個Table。
print(b["X"])  --- 10
b["X"] = 20
print(a["X"])   --- 20
a = nil         --如今只有b還在引用Table
b = nil         --再也沒有對Table的引用了。 
一個Table的多個引用在對Table進行修改,修改的是全局的概念。當一個程序再也沒有一個Table的引用時,Lua的垃圾收集器最終會刪除該Table,並複用它的內存。

    全部Table均可以有不一樣類型的索引來訪問value值,當須要容納新條目時,Table會自動增加。spa

a = {} --空的table
-- 建立1000個新條目
for i = 1, 1000 do a[i] = i*2 end
print(a[9])  --> 18
a["X"] = 10
print(a["X"]) -->10
print(a["y"]) -->nil  當table的某個元素沒有初始化時,他的內容就是nil。另外能夠像全局變量同樣,將nil賦予table的某個元素來刪除該元素。(Lua中,全局變量也是存儲在一個普通的table中)

    爲了表示一條記錄,能夠將字段名做爲索引。lua中有「語法糖」的概念:指針

a["name"]  ==  a.name

    如果要表示一個傳統的數組或線性表,只需以整數做爲key來使用table便可。Lua中數組一般以「1」做爲索引的起始值。code

     在Lua5.1中,長度操做符「#」用於返回一個數組或線性表的最後一個索引值!對象

     對於全部未初始化的元素的索引結果都是nil。Lua將nil做爲界定數組結尾的標誌。當一個數組有「空隙」時,即中間含有nil時,長度操做符會認爲這些nil元素就是結尾標記。若是須要處理那些含有「空隙」的數組,可使用函數table.maxn,它將返回一個table的最大正索引數:索引

a = {}
a[10000] = 1
print(table.maxn(a))  ---》10000

    當對索引的實際類型不是很肯定時,能夠明確地使用一個顯示的轉換:隊列

i = 10 j = "10"  k = "+10"
a = {}
a[i] = "one value" 
a[j] = "another value" 
a[k] = "yet another value" 

print(a[j]) --->another value
print(a[k]) --->yet another value
print(a[tonumber(j)]) --->one value
相關文章
相關標籤/搜索