Appearance
数组
在 Lua 中,数组是通过表(table)来实现的。本章节将介绍 Lua 中数组的定义、访问、修改和相关操作。
数组定义
在 Lua 中,数组可以通过表来定义,索引从 1 开始:
lua
-- 定义一个数组
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
-- 访问数组元素
print(fruits[1]) -- 输出 苹果
print(fruits[2]) -- 输出 香蕉
print(fruits[3]) -- 输出 橙子
print(fruits[4]) -- 输出 葡萄数组长度
使用 # 运算符获取数组长度:
lua
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
print(#fruits) -- 输出 4数组遍历
使用 ipairs 遍历
lua
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end输出:
1 苹果
2 香蕉
3 橙子
4 葡萄使用 for 循环遍历
lua
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
for i = 1, #fruits do
print(i, fruits[i])
end输出:
1 苹果
2 香蕉
3 橙子
4 葡萄数组修改
修改元素
lua
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
fruits[2] = "梨"
print(fruits[2]) -- 输出 梨添加元素
lua
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
-- 在末尾添加元素
fruits[#fruits + 1] = "梨"
print(fruits[5]) -- 输出 梨
-- 使用 table.insert 添加元素
table.insert(fruits, "桃")
print(fruits[6]) -- 输出 桃
-- 在指定位置插入元素
table.insert(fruits, 2, "草莓")
print(fruits[2]) -- 输出 草莓
print(fruits[3]) -- 输出 香蕉删除元素
lua
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
-- 删除末尾元素
fruits[#fruits] = nil
print(#fruits) -- 输出 3
-- 使用 table.remove 删除元素
table.remove(fruits, 2)
print(fruits[2]) -- 输出 橙子数组操作
排序
使用 table.sort 函数对数组进行排序:
lua
local numbers = {3, 1, 4, 1, 5, 9, 2, 6}
table.sort(numbers)
for i, num in ipairs(numbers) do
print(num)
end输出:
1
1
2
3
4
5
6
9拼接
使用 table.concat 函数拼接数组元素:
lua
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
local str = table.concat(fruits, ", ")
print(str) -- 输出 苹果, 香蕉, 橙子, 葡萄查找
lua
function find(arr, value)
for i, v in ipairs(arr) do
if v == value then
return i
end
end
return nil
end
local fruits = {"苹果", "香蕉", "橙子", "葡萄"}
print(find(fruits, "香蕉")) -- 输出 2
print(find(fruits, "梨")) -- 输出 nil多维数组
Lua 支持多维数组,通过表的嵌套来实现:
lua
-- 定义一个二维数组
local matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
-- 访问二维数组元素
print(matrix[1][1]) -- 输出 1
print(matrix[2][2]) -- 输出 5
print(matrix[3][3]) -- 输出 9
-- 遍历二维数组
for i = 1, #matrix do
for j = 1, #matrix[i] do
io.write(matrix[i][j], " ")
end
io.write("\n")
end输出:
1 2 3
4 5 6
7 8 9稀疏数组
在 Lua 中,数组可以是稀疏的,即索引可以不连续:
lua
local sparseArray = {}
sparseArray[1] = "第一个元素"
sparseArray[100] = "第一百个元素"
sparseArray[1000] = "第一千个元素"
print(sparseArray[1]) -- 输出 第一个元素
print(sparseArray[100]) -- 输出 第一百个元素
print(sparseArray[1000]) -- 输出 第一千个元素
print(#sparseArray) -- 输出 1,因为 # 只计算连续部分的长度数组的应用
示例 1:计算数组元素的和
lua
function sum(arr)
local total = 0
for i, v in ipairs(arr) do
total = total + v
end
return total
end
local numbers = {1, 2, 3, 4, 5}
print(sum(numbers)) -- 输出 15示例 2:查找数组中的最大值
lua
function max(arr)
local maxValue = arr[1]
for i = 2, #arr do
if arr[i] > maxValue then
maxValue = arr[i]
end
end
return maxValue
end
local numbers = {3, 1, 4, 1, 5, 9, 2, 6}
print(max(numbers)) -- 输出 9示例 3:反转数组
lua
function reverse(arr)
local reversed = {}
for i = #arr, 1, -1 do
table.insert(reversed, arr[i])
end
return reversed
end
local numbers = {1, 2, 3, 4, 5}
local reversed = reverse(numbers)
for i, v in ipairs(reversed) do
print(v)
end输出:
5
4
3
2
1示例 4:合并两个数组
lua
function merge(arr1, arr2)
local merged = {}
for i, v in ipairs(arr1) do
table.insert(merged, v)
end
for i, v in ipairs(arr2) do
table.insert(merged, v)
end
return merged
end
local arr1 = {1, 2, 3}
local arr2 = {4, 5, 6}
local merged = merge(arr1, arr2)
for i, v in ipairs(merged) do
print(v)
end输出:
1
2
3
4
5
6小结
本章节介绍了 Lua 中数组的定义、访问、修改、遍历和相关操作,包括数组长度、添加元素、删除元素、排序、拼接、查找、多维数组和稀疏数组等内容。掌握这些内容,对于编写 Lua 程序非常重要。