Lua 数组基础概念
Lua 中的数组实际上是用整数索引的 table,是一种特殊形式的表。数组索引通常从 1 开始(Lua 惯例),但也可以从其他值开始。
创建数组
通过表构造器初始化数组:
-- 索引从 1 开始的数组
local arr = {10, 20, 30, "hello"}
-- 显式指定索引(可自定义起始索引)
local arr2 = {[1] = "a", [2] = "b", [3] = "c"}
访问和修改元素
通过索引直接操作:
print(arr[1]) -- 输出 10
arr[2] = 200 -- 修改第二个元素
arr[5] = 50 -- 新增第五个元素
遍历数组
使用 ipairs
或 for
循环:
-- ipairs 遍历(从 1 到连续整数索引结束)
for i, v in ipairs(arr) do
print(i, v)
end
-- 数值 for 循环
for i = 1, #arr do
print(arr[i])
end
获取数组长度
#
操作符返回连续整数索引部分的最大索引值:
print(#arr) -- 若 arr = {10, 20, nil, 40}, 输出 2(因第三位为 nil)
多维数组
通过嵌套 table 实现:
local matrix = {
{1, 2, 3},
{4, 5, 6}
}
print(matrix[1][2]) -- 输出 2
example:
-- 初始化数组
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 开始:Lua 惯例,但技术上可从任意值开始。
- 非连续索引:若数组含
nil
空隙,#
和ipairs
可能不会遍历全部元素。 - 动态扩展:数组大小无需预先声明,插入新元素会自动扩展。
实用操作示例
插入元素:
table.insert(arr, 3, "new") -- 在位置 3 插入 "new"
删除元素:
table.remove(arr, 2) -- 移除第二个元素
排序:
table.sort(arr) -- 默认升序
table.sort(arr, function(a, b) return a > b end) -- 降序