陣列是物件的有序排列,可以是包含行集合的一維陣列或包含多個行和列的多維陣列。
在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中可以節省大量記憶體而無需任何特殊技術。