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