數(shù)組是一組有序的對象排列,既可以是一維的也可以是多維的。
在 Lua 語言中,數(shù)組是用整數(shù)索引表實(shí)現(xiàn)的。數(shù)組的大小并不固定,隨著數(shù)組元素的增加,它可以動(dòng)態(tài)地增加內(nèi)存空間大小。
一維數(shù)組可以使用一個(gè)簡單的表結(jié)構(gòu)表示??梢酝ㄟ^一個(gè)簡單循環(huán)初始化數(shù)組或者讀取數(shù)組中數(shù)據(jù)。示例代碼如下所示:
array = {"Lua", "Tutorial"}
for i= 0, 2 do
print(array[i])
end
執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:
nil
Lua
Tutorial
從上面的例子中可以看出,當(dāng)我們嘗試著訪問數(shù)組中一個(gè)不存在的索引時(shí),會(huì)得到 nil 值。 Lua 語言與 C 語言不同,Lua 數(shù)組的索引是從 1 開始的,而 C 語言中索引是從 0 開始的。不過呢,你也可以在索引值為 0 或小于 0 的位置創(chuàng)建對象。下面的代碼演示了如何使用負(fù)索引值創(chuàng)建并初始化數(shù)組:
array = {}
for i= -2, 2 do
array[i] = i *2
end
for i = -2,2 do
print(array[i])
end
執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:
-4
-2
0
2
4
多維數(shù)組有以下兩種實(shí)現(xiàn)方式:
使用方法一創(chuàng)建 3x3 的二維數(shù)組:
-- 初始化數(shù)組
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i*j
end
end
-- 訪問數(shù)組元素
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:
1
2
3
2
4
6
3
6
9
通過修改數(shù)組的的索引值實(shí)現(xiàn) 3x3 的二維數(shù)組,示例代碼如下:
-- 初始化數(shù)組
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
for col=1,maxColumns do
array[row*maxColumns +col] = row*col
end
end
-- 訪問數(shù)組元素
for row=1,maxRows do
for col=1,maxColumns do
print(array[row*maxColumns +col])
end
end
執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:
1
2
3
2
4
6
3
6
9
正如從上面例子中所看到的那樣,數(shù)組中數(shù)據(jù)是基于索引存儲(chǔ)的。這使得數(shù)組可以以稀疏的方式存儲(chǔ),這也是 Lua 矩陣的存儲(chǔ)方式。正是因?yàn)?Lua 中不會(huì)存儲(chǔ) nil 值,所以 Lua 不需要使用任何特殊的技術(shù)就可以節(jié)約大量的空間,這一點(diǎn)在其它語言中是做不到的。