目录
什么是 Lua 数组
Lua 中的“数组”实际上是通过 Lua 的核心数据结构 table
实现的。Lua 没有独立的数组类型,而是用表的数字索引(从 1 开始)来模拟数组行为。数组本质上是表的子集,用于存储有序的元素序列。
为什么要使用数组
- 有序存储:管理连续的数据集合。
- 高效遍历:支持快速迭代访问。
- 动态调整:无需预定义大小。
- 通用性:与其他表功能无缝结合。
Lua 数组的定义与特性
- 定义:用
table
创建,索引从 1 开始。 - 动态性:长度可变,元素可随时添加或删除。
- 类型混合:元素可以是任意 Lua 数据类型。
- 长度:使用
#
获取连续数字索引的元素个数。
代码示例
数组创建与访问
1 2 3 4 5 6 7 8 9 10 11 12 13 | -- 创建数组 local fruits = {"苹果", "香蕉", "橙子"} -- 访问元素 print("第一个: " .. fruits[1]) print("第二个: " .. fruits[2]) -- 修改元素 fruits[2] = "葡萄" print("修改后第二个: " .. fruits[2]) -- 获取长度 print("长度: " .. #fruits) |
运行结果:
1 2 3 4 | 第一个: 苹果 第二个: 香蕉 修改后第二个: 葡萄 长度: 3 |
数组操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | local numbers = {10, 20, 30} -- 添加元素 table.insert(numbers, 40) print("添加后: " .. table.concat(numbers, ", ")) -- 删除元素 table.remove(numbers, 2) -- 删除索引 2 的元素 print("删除后: " .. table.concat(numbers, ", ")) -- 遍历数组 for i = 1, #numbers do print("元素 " .. i .. ": " .. numbers[i]) end |
运行结果:
1 2 3 4 5 | 添加后: 10, 20, 30, 40 删除后: 10, 30, 40 元素 1: 10 元素 2: 30 元素 3: 40 |
多维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | -- 创建二维数组 local matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} } -- 访问元素 print("matrix[2][3]: " .. matrix[2][3]) -- 6 -- 遍历二维数组 for i = 1, #matrix do for j = 1, #matrix[i] do io.write(matrix[i][j] .. " ") end print() -- 换行 end |
运行结果:
1 2 3 4 | matrix[2][3]: 6 1 2 3 4 5 6 7 8 9 |
数组常用函数
函数 | 描述 | 示例 |
---|---|---|
table.insert(t, value) | 在末尾插入元素 | table.insert(t, 5) |
table.insert(t, pos, value) | 在指定位置插入 | table.insert(t, 2, 5) |
table.remove(t, pos) | 删除指定位置元素 | table.remove(t, 1) |
table.concat(t, sep) | 连接数组元素为字符串 | table.concat({"a", "b"}, ",") → “a,b” |
#t | 获取数组长度 | #{"a", "b"} → 2 |
工作原理详解
- 表实现:数组是表的数字索引部分,键为连续整数。
- 长度计算:
#
返回最大连续数字索引,但遇到nil
停止。 - 内存管理:表动态分配内存,支持扩容和收缩。
优点与应用场景
优点
- 灵活:长度动态调整,元素类型不限。
- 简洁:无需显式声明大小。
- 高效:连续索引访问速度快。
应用场景
- 列表管理:存储游戏物品、玩家数据。
- 矩阵运算:二维数组用于网格计算。
- 数据遍历:处理有序集合。
常见问题与注意事项
- 索引从 1 开始:
- 与 C 等语言的 0 起点不同。
- 长度计算局限:
#
只对连续索引有效,稀疏数组需谨慎。
1 2 | local t = {1, 2, nil, 4} print(#t) -- 2(遇到 nil 停止) |
- 性能优化:
- 大量插入删除时考虑预分配空间。
- 多维数组嵌套:
- 每行长度可不同,需单独检查。
参考资料与出站链接
- 官方文档:
- 学习资源:
- 菜鸟教程 – Lua 表(中文)
- Lua Users – Tables(英文)
- 工具支持:
- ZeroBrane Studio:调试数组。
如果您需要更复杂的数组示例(如稀疏数组处理或排序),请告诉我,我会进一步扩展!
发表回复