lua table常用函数汇总

发布于:2025-08-04 ⋅ 阅读:(12) ⋅ 点赞:(0)

在 Lua 中,table 是最核心的数据结构,几乎所有复杂数据都依赖表来实现。Lua 标准库提供了一系列操作表的函数,主要集中在 table 模块中。以下是常用的 table 函数及其用法:

1. table.insert(t, [pos,] value)

功能:向表 t 中插入元素

  • pos(可选):指定插入位置(索引),默认插入到表的末尾
  • 若表是数组(连续数字索引),插入后会自动调整后续元素的索引

示例

local t = {10, 20, 30}
table.insert(t, 40)  -- 插入到末尾 → {10, 20, 30, 40}
table.insert(t, 2, 15)  -- 插入到索引2的位置 → {10, 15, 20, 30, 40}

2. table.remove(t, [pos])

功能:从表 t 中删除元素

  • pos(可选):指定删除位置,默认删除最后一个元素
  • 删除后会自动调整后续元素的索引(仅对数组有效)

示例

local t = {10, 15, 20, 30, 40}
table.remove(t)  -- 删除最后一个元素 → {10, 15, 20, 30}
table.remove(t, 2)  -- 删除索引2的元素 → {10, 20, 30}

3. table.concat(t, [sep, i, j])

功能:将表 t 中从索引 i 到 j 的元素拼接成字符串

  • sep(可选):元素间的分隔符,默认无
  • ij(可选):起始和结束索引,默认从 1 到表长度

示例

local t = {"Lua", "Python", "Java"}
print(table.concat(t))  -- 输出 "LuaPythonJava"
print(table.concat(t, ", "))  -- 输出 "Lua, Python, Java"
print(table.concat(t, " | ", 2, 3))  -- 输出 "Python | Java"

4. table.sort(t, [comp])

功能:对表 t 进行排序(仅对数组部分有效)

  • comp(可选):比较函数,默认按升序排序
    • 比较函数格式:function(a, b) return a < b end(返回 true 表示 a 应在 b 前)

示例

local t = {3, 1, 4, 2}
table.sort(t)  -- 默认升序 → {1, 2, 3, 4}

-- 自定义降序排序
table.sort(t, function(a, b) return a > b end)  -- → {4, 3, 2, 1}

-- 对字符串排序
local words = {"banana", "apple", "cherry"}
table.sort(words)  -- 按字母顺序 → {"apple", "banana", "cherry"}

5. table.maxn(t)(Lua 5.1 及更早版本)

功能:返回表 t 中最大的数字索引(仅对数组有效)

  • 在 Lua 5.2+ 中被 #t(长度运算符)替代

示例

local t = {10, 20, 30}
print(table.maxn(t))  -- 输出 3(最大索引是3)

local t2 = {[1] = 5, [5] = 10, [3] = 7}
print(table.maxn(t2))  -- 输出 5(最大数字索引是5)

6. 长度运算符 #t(非函数,但常用)

功能:返回表 t 数组部分的长度(连续数字索引的最大索引)

  • 注意:仅对连续的数字索引有效,若存在空洞(如 {1, [3]=3}),结果可能不符合预期

示例

local t = {10, 20, 30}
print(#t)  -- 输出 3

local t2 = {1, 2, [5] = 5}
print(#t2)  -- 输出 2(因为索引3、4不存在,视为数组结束)

7. table.unpack(t, [i, j])(Lua 5.1)/ unpack(t, [i, j])(Lua 5.2+)

功能:将表 t 中从索引 i 到 j 的元素作为多个值返回

  • 常用于函数参数展开

示例

local t = {10, 20, 30}
local a, b, c = table.unpack(t)  -- a=10, b=20, c=30

-- 作为函数参数
local function sum(x, y, z) return x + y + z end
print(sum(table.unpack(t)))  -- 输出 60(等价于 sum(10,20,30))

 8. 遍历表的常用方式虽然不是 table 模块函数,但遍历表是高频操作:

local t = {name = "Lua", version = 5.1, {1, 2}, {3, 4}, 6, [10]="hello" ,8}

-- 1. 遍历数组部分(ipairs:仅遍历连续数字索引,从1开始)
for i, v in ipairs(t) do
    print(i, v)  -- 输出索引1和2的元素(子表)
end
print("*********************************")

-- 2. 遍历所有键值对(pairs:遍历所有键,包括字符串键和非连续数字键)
for k, v in pairs(t) do
    print(k, v)  -- 输出 name、version 及所有数字索引
end

print("*********************************")
-- 3. 遍历所有值(values)
for _, v in ipairs(t) do
    print(v)  -- 输出所有元素
end

print("*********************************")
-- 4. 遍历所有键(keys)
for k in pairs(t) do
    print(k)  -- 输出所有键
    if type(k) == "number" then
        print(t[k])  -- 输出所有数字索引的值
    end
end

输出结果:

1 table: 0x11d00e980

2 table: 0x11d00e9e0

3 6

4 8

*********************************

1 table: 0x11d00e980

2 table: 0x11d00e9e0

3 6

4 8

name Lua

10 hello

version 5.1

*********************************

table: 0x11d00e980

table: 0x11d00e9e0

6

8

*********************************

1

table: 0x11d00e980

2

table: 0x11d00e9e0

3

6

4

8

name

10

hello

version

 

总结

函数 / 运算符 核心功能 适用场景
table.insert 插入元素 动态构建数组
table.remove 删除元素 动态删除数组元素
table.concat 拼接数组元素为字符串 字符串拼接、日志输出
table.sort 排序数组 数据排序
#t 获取数组长度 遍历、边界判断
table.unpack 展开数组为多个值 函数参数传递
ipairs/pairs 遍历表元素 数据读取、处理

 这些函数是操作 Lua 表的基础,灵活运用它们可以高效处理数组、字典等各种数据结构。

 


网站公告

今日签到

点亮在社区的每一天
去签到