關於table的文字說明我引用了lua程序設計的一些語句來歸納表述:數組
table類型實現了「關係數組」。「關係數組」是一種具備特殊索引方式的數組。不只能夠經過整數來索引他,還可使用字符串活着其餘類型的值(除了nil)來索引他。此外,table沒有固定大小,能夠動態的添加任意數量的元素到一個table中。lua
在lua中,table既不是「值」也不是「變量」,而是「對象」,能夠將一個table想象成一種動態分配的對象,程序僅持有一個對他們的引用(或指針),lua不會暗中產生table的副本或者建立新的table。
spa
引用完別人的說明以後,如今來看一下一些例子:
設計
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for i=1,#testTable do print(testTable[i]) end
輸出爲:指針
1 2 hi 5 6 8
config = {1,2,3}和k="hello"去哪裏了呢?待會在分析這個問題,接下來再看一個實例:
code
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for i,value in ipairs(testTable) do print("i = " .. i .. ", value = " .. value) end
他的輸出爲:對象
i = 1, value = 1 i = 2, value = 2 i = 3, value = hi i = 4, value = 5 i = 5, value = 6 i = 6, value = 8
config = {1,2,3}和k="hello"也並無輸出。再看第三個實例:索引
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for k,v in pairs(testTable) do print(k,v) end
輸出爲:ip
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for k,v in pairs(testTable) do print(k,v) end
這時候是把全部的都輸出了,可是有沒有發現,輸出順序有點變化了,字符串
由於config = {1,2,3}的索引爲config,k = "hello"的索引爲k,而其餘的都有lua給予的天然索引,好比1的索引爲1,2的索引爲2,5的索引爲3,輸出的時候是先把天然索引的所有輸出,接着在根據在table的順序進行一個個的輸出。
爲何第一個實例和第二個實例只輸出了天然索引的值,而忽略了其餘的?其實第一個實例和第二個實例實際上時同樣的,只是表現形式不同,所以咱們只須要說明第二種與第三種的區別便可:
pairs會遍歷table的全部鍵值對,而ipairs就是固定地從key值1開始,下次key累加1進行遍歷,若是key對應的value不存在,就中止遍歷。所以咱們在遍歷table的時候要根據本身的需求而選擇一種