Lua - 数组

数组是有序排列的对象,可以是包含行集合的一维数组,也可以是包含多行和多列的多维数组.

在Lua中,数组使用带整数的索引表实现.数组的大小不固定,它可以根据我们的要求增长,受内存限制.

一维数组

一个-dimensional数组可以使用简单的表结构表示,并且可以使用简单的 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的示例.

 -- Initializing the array
array = {}

for i=1,3 do
   array[i] = {}
	
   for j=1,3 do
      array[i][j] = i*j
   end
	
end

-- Accessing the array

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

下面使用操纵索引显示多维数组的示例.

-- Initializing the array

array = {}

maxRows = 3
maxColumns = 3

for row=1,maxRows do

   for col=1,maxColumns do
      array[row*maxColumns +col] = row*col
   end
	
end

-- Accessing the array

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中可以节省大量内存而无需任何特殊技术.