详解Lua中的数组概念知识
Lua中数组基于表与整数索引实现,长度可变,支持负索引。一维数组用表表示,访问不存在的索引返回nil。多维数组可通过表嵌套或手动计算索引构建。Lua表不存储nil值,支持稀疏矩阵以节省内存。
数组,简单说就是一堆有序数据的集合。它可以是一个单维的列表,也可以是多行多列的多维阵列——本质上就是用一种结构把多个数据组织起来。

在Lua里,数组是靠表(table)配合整数索引来实现的。它的长度不是固定的,只要你内存够,随时可以往里面加东西。
一维数组
一维数组用一张简单的表就能表示,初始化之后用for循环就能读取。来看个例子:
for i= 0, 2 do
print(array[i])
end
跑完这段代码,输出是这样的:
Lua
Tutorial
注意看,当我们访问一个不存在的索引时,Lua不会报错,而是直接返回nil。另外,Lua的索引默认从1开始,但并不是说索引0和负数就不能用——实际上完全可以,甚至负索引也能正常创建和访问。下面这个例子就用for循环初始化了一个包含负索引的数组:
for i= -2, 2 do
array[i] = i *2
end
for i = -2,2 do
print(array[i])
end
运行结果:
-2
0
2
4
可以看到,负索引用起来和正索引没什么两样,非常灵活。
多维数组
多维数组在Lua里有两种常见的实现方式:
- 数组的数组(即表中套表)
- 通过手动计算索引,用一维数组模拟多维
先看第一种,用数组的数组来构造一个3×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
输出结果:
2
3
2
4
6
3
6
9
再来看第二种,通过手动计算索引的方式来实现同样的3×3矩阵:
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
输出结果和上面完全一样:
2
3
2
4
6
3
6
9
从这些例子可以看出来,Lua的数组本质上是基于索引的表存储。有意思的是,Lua还允许你用稀疏矩阵的方式工作——因为Lua在表里根本不存储值为nil的元素,所以如果你有一个很大但大部分元素都是nil的矩阵,Lua会自动忽略掉那些空位,从而节省大量内存。这一点比起其他语言里硬性分配连续内存的做法,要灵活得多。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















