數組是對象的有序排列,可以是包含行集合的一維數組或包含多個行和列的多維數組。
在Lua中,使用帶整數的索引表實現數組。 數組的大小不固定,它可以根據要求增長,受記憶體限制。
一維數組
一維數組可以使用簡單的表結構表示,並且可以使用for
迴圈進行初始化和讀取。 如下例子所示。
array = {"Lua", "Tutorial"}
for i = 0, 2 do
print(array[i])
end
當運行上面的代碼時,將得到以下輸出結果 -
nil
Lua
Tutorial
正如在上面的代碼中所看到的,當嘗試訪問數組中不存在的索引中的元素時,它返回nil
值。 在Lua中,索引通常從索引1
開始。但是也可以在索引0
和0
以下(負數)創建對象。 使用負索引的數組如下所示,使用for
迴圈初始化數組。
array = {}
for i= -2, 2 do
array[i] = i *2
end
for i = -2,2 do
print(array[i])
end
當運行上面的代碼時,將得到以下輸出結果 -
-4
-2
0
2
4
多維數組
多維數組有兩種方式實現。它們分別如下 -
- 數組的數組
- 通過操縱一維數組的索引
下麵是使用數組陣列 3 x 3
的多維數組的示例。
-- 初始化數組
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i*j
end
end
-- 訪問數組
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
當運行上面的代碼時,將得到以下輸出結果 -
1
2
3
2
4
6
3
6
9
下麵使用操作索引顯示多維數組的示例。
-- 初始化數組
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
for col=1,maxColumns do
array[row*maxColumns +col] = row*col
end
end
-- 訪問數組
for row=1,maxRows do
for col=1,maxColumns do
print(array[row*maxColumns +col])
end
end
當運行上面的代碼時,將得到以下輸出結果 -
1
2
3
2
4
6
3
6
9
如在上面的示例中所看到的,數據是基於索引存儲的。 可以以稀疏的方式放置元素,這是Lua實現數組的方式。 在Lua中由於它沒有存儲nil
值,因此與其他編程語言中使用的特殊技術相比,Lua中可以節省大量記憶體而無需任何特殊技術。