Lua陣列


陣列是物件的有序排列,可以是包含行集合的一維陣列或包含多個行和列的多維陣列。

在Lua中,使用帶整數的索引表實現陣列。 陣列的大小不固定,它可以根據要求增長,受記憶體限制。

一維陣列

一維陣列可以使用簡單的表結構表示,並且可以使用for迴圈進行初始化和讀取。 如下例子所示。

array = {"Lua", "Tutorial"}

for i = 0, 2 do
   print(array[i])
end

當執行上面的程式碼時,將得到以下輸出結果 -

nil
Lua
Tutorial

正如在上面的程式碼中所看到的,當嘗試存取陣列中不存在的索引中的元素時,它返回nil值。 在Lua中,索引通常從索引1開始。但是也可以在索引00以下(負數)建立物件。 使用負索引的陣列如下所示,使用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中可以節省大量記憶體而無需任何特殊技術。