数组

Lua 数组

数组是一组有序的对象排列,既可以是一维的也可以是多维的。

在 Lua 语言中,数组是用整数索引表实现的。数组的大小并不固定,随着数组元素的增加,它可以动态地增加内存空间大小。

一维数组

一维数组可以使用一个简单的表结构表示。可以通过一个简单循环初始化数组或者读取数组中数据。示例代码如下所示:

array = {"Lua", "Tutorial"}

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

执行上面的代码可以得到如下的输出结果:

nil
Lua
Tutorial

从上面的例子中可以看出,当我们尝试着访问数组中一个不存在的索引时,会得到 nil 值。 Lua 语言与 C 语言不同,Lua 数组的索引是从 1 开始的,而 C 语言中索引是从 0 开始的。不过呢,你也可以在索引值为 0 或小于 0 的位置创建对象。下面的代码演示了如何使用负索引值创建并初始化数组:

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

多维数组

多维数组有以下两种实现方式:

  1. 数组的数组(译注:数组的每一个元素是一个数组)。
  2. 修改一维数组的索引值(译注:将多维数组映射到一维数组中)。

使用方法一创建 3x3 的二维数组:

-- 初始化数组
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

通过修改数组的的索引值实现 3x3 的二维数组,示例代码如下:

-- 初始化数组
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 不需要使用任何特殊的技术就可以节约大量的空间,这一点在其它语言中是做不到的。

糖果

糖果
LUA教程

Apache APISIX在SAE应用市场发布

Apache APISIX在SAE应用市场发布 Continue reading

APISIX后台管理路由创建接口

Published on December 06, 2019

Openresty Nginx Tengine添加动态so库

Published on October 11, 2019