CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
Lua速成班系统函数string库table库

Lua速成班 第十三课 系统函数第三节 string库 table库

2026-10-30 23:26 作者:浮生梦 Lua速成班系统函数string库table库
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十三课 系统函数第三节 string库 table库」,主讲:浮生梦。 课程体系:996 引擎传奇开发教学 · 威海旷世互娱教学基地

一、table.concat 表拼接函数

功能说明

将表中的所有元素连接成一个字符串,可以指定分隔符和起始结束位置。

核心用途

  1. 将表转换为字符串存储(字符串变量无法直接存储表结构)
  1. 高性能拼接,避免手动循环迭代(底层为C语言实现)
  1. 实现类似JSON的序列化转换

性能对比

手动迭代拼接 vs table.concat:

  • 手动迭代:使用for循环逐个拼接,性能差
  • table.concat:底层C实现,百万级参数也能高效处理

参数详解

  • 参数1:目标表
  • 参数2:分隔符(可选,默认为空)
  • 参数3:起始位置i(可选)
  • 参数4:结束位置j(可选)

练习题代码

lua
-- 练习1:基础拼接
local t = {1, 2, 3, 4}
local result = table.concat(t, "-")
print(result)  -- 输出: 1-2-3-4

-- 练习2:指定范围拼接
local t = {10, 20, 30, 40, 50}
local result = table.concat(t, ",", 2, 4)
print(result)  -- 输出: 20,30,40

-- 练习3:实现数据存储转换
local playerData = {"Alice", "Lv.50", "Warrior"}
local saveString = table.concat(playerData, "|")
print("存档数据: " .. saveString)

二、table.insert 插入函数

功能说明

向表中插入元素,支持在指定位置插入或默认在末尾追加。

核心机制

  • 两参数模式:table.insert(表, 值) → 在末尾追加
  • 三参数模式:table.insert(表, 位置, 值) → 在指定位置插入,后续元素后移
  • 适用于哈希表结构(t[#t+1]方式无法用于哈希表)

内存扩容原理

  • 空表初始容量为0
  • 每次扩容按2的幂次增长:0→2→4→8→16→32...
  • 频繁插入时建议预分配空间优化性能

练习题代码

lua
-- 练习1:末尾追加
local t = {1, 2, 3}
table.insert(t, 4)
for i, v in ipairs(t) do print(i, v) end
-- 输出: 1 1, 2 2, 3 3, 4 4

-- 练习2:指定位置插入
local t = {10, 30, 40}
table.insert(t, 2, 20)
for i, v in ipairs(t) do print(i, v) end
-- 输出: 1 10, 2 20, 3 30, 4 40

-- 练习3:预分配优化(高频操作场景)
local items = {}
for i = 1, 1000 do
    items[i] = true  -- 预分配空间
end
for i = 1, 1000 do
    items[i] = i * 10  -- 实际赋值
end

三、table.move 移动/复制函数

功能说明

将源表中指定范围的元素移动到目标表,支持表复制和表合并。

参数详解

  • 参数1:源表(a1)
  • 参数2:源表起始索引(f)
  • 参数3:源表结束索引(e)
  • 参数4:目标表起始索引(t)
  • 参数5:目标表(a2,可选,默认为源表)

核心用途

  1. 表深度复制(创建独立内存地址的新表)
  1. 表合并操作
  1. 数据筛选重组(如技能Buff筛选)

表复制 vs 表引用

  • t2 = t1:两个变量指向同一个内存地址,修改一个会影响另一个
  • table.move:创建独立的新表,互不影响

练习题代码

lua
-- 练习1:表复制(独立内存地址)
local source = {1, 2, 3, 4, 5}
local target = {}
table.move(source, 1, #source, 1, target)
source[3] = 100
print(target[3])  -- 输出: 3(不受影响)

-- 练习2:表合并
local t1 = {1, 2, 3}
local t2 = {4, 5, 6}
table.move(t2, 1, #t2, #t1 + 1, t1)
for i, v in ipairs(t1) do print(i, v) end
-- 输出: 1 1, 2 2, 3 3, 4 4, 5 5, 6 6

-- 练习3:数据筛选(模拟技能Buff系统)
local allBuffs = {"狂暴", "护盾", "中毒", "加速", "冰冻"}
local activeBuffs = {}
-- 只选取前3个Buff
local count = math.min(3, #allBuffs)
table.move(allBuffs, 1, count, 1, activeBuffs)
print("激活Buff数量: " .. #activeBuffs)

四、table.remove 删除函数

功能说明

删除表中指定位置的元素,返回被删除的值。默认删除最后一个元素。

核心特性

  • 无位置参数:删除最后一个元素(模拟栈的pop操作)
  • 有位置参数:删除指定位置,后续元素前移补位
  • 返回值:被删除的元素值

实际应用场景

  • 道具筛选(剔除不符合条件的物品)
  • 队列管理
  • 栈结构实现

练习题代码

lua
-- 练习1:删除最后一个元素
local t = {10, 20, 30, 40}
local removed = table.remove(t)
print("删除值: " .. removed)  -- 40
print("剩余长度: " .. #t)      -- 3

-- 练习2:删除指定位置
local t = {"祖玛项链", "祖玛戒指", "祖玛头盔", "天尊项链"}
table.remove(t, 2)  -- 删除"祖玛戒指"
for i, v in ipairs(t) do print(i, v) end

-- 练习3:条件筛选(删除包含特定字符串的元素)
local items = {"祖玛项链", "祖玛戒指", "天尊项链", "祖玛头盔"}
local i = 1
while i <= #items do
    if string.find(items[i], "天尊") then
        table.remove(items, i)
    else
        i = i + 1
    end
end
print("筛选后物品:")
for _, v in ipairs(items) do print(v) end

五、table.sort 排序函数

功能说明

对表元素进行排序,默认升序。支持自定义比较函数实现复杂排序逻辑。

参数详解

  • 参数1:目标表(必须是数组结构,元素类型需一致)
  • 参数2:比较函数comp(可选)
  • comp(a, b)返回true时,a排在b前面
  • a > b → 降序排序
  • a < b → 升序排序

核心用途

  • 排行榜实现
  • 数据整理展示
  • 自定义规则排序

练习题代码

lua
-- 练习1:默认升序排序
local scores = {85, 92, 78, 96, 88}
table.sort(scores)
for _, v in ipairs(scores) do print(v) end
-- 输出: 78, 85, 88, 92, 96

-- 练习2:降序排序(排行榜)
local scores = {85, 92, 78, 96, 88}
table.sort(scores, function(a, b) return a > b end)
print("排行榜:")
for rank, score in ipairs(scores) do
    print(rank .. "名: " .. score .. "分")
end

-- 练习3:字符串长度排序
local names = {"Alice", "Bob", "Christina", "Dave"}
table.sort(names, function(a, b) return #a < #b end)
for _, v in ipairs(names) do print(v) end
-- 输出: Bob, Dave, Alice, Christina

六、table.pack 打包函数

功能说明

将多个元素打包成表,自动添加n字段记录元素数量。

核心特性

  • 返回表结构包含所有参数
  • 自动添加n字段表示参数个数
  • 主要用于处理可变参数函数

练习题代码

lua
-- 练习1:基础打包
local t = table.pack("苹果", "香蕉", "橙子")
print("数量: " .. t.n)  -- 3
for i = 1, t.n do print(t[i]) end

-- 练习2:处理可变参数
function processItems(...)
    local args = table.pack(...)
    print("收到" .. args.n .. "个物品:")
    for i = 1, args.n do
        print("  " .. i .. ". " .. args[i])
    end
end
processItems("剑", "盾", "药水", "金币")

-- 练习3:nil值处理注意点
local t = table.pack(1, nil, 3, nil, 5)
print("n值: " .. t.n)      -- 5(包含nil)
print("长度#t: " .. #t)    -- 1(遇到nil停止)

七、table.unpack 解包函数

功能说明

将表解包为多个返回值,支持指定范围解包。

核心用途

  1. 表转多返回值
  1. 函数参数传递(将表作为参数列表传入)
  1. 多变量赋值

版本差异

  • Lua 5.1:直接使用unpack()
  • Lua 5.3+:使用table.unpack()

练习题代码

lua
-- 练习1:基础解包
local t = {10, 20, 30}
local a, b, c = table.unpack(t)
print(a, b, c)  -- 10 20 30

-- 练习2:指定范围解包
local data = {100, 200, 300, 400, 500}
local x, y = table.unpack(data, 2, 3)
print(x, y)  -- 200 300

-- 练习3:函数参数传递
function calculate(a, b, c)
    return a + b + c
end
local params = {10, 20, 30}
local result = calculate(table.unpack(params))
print("计算结果: " .. result)  -- 60

-- 练习4:嵌套函数调用
function getConfig()
    return table.pack("localhost", 3306, "root", "password")
end
local host, port, user, pass = table.unpack(getConfig())
print("连接: " .. host .. ":" .. port)

课后作业(5道)

作业1:字符串拼接器

编写一个函数,接收任意数量的字符串参数,使用table.concat将它们用" | "连接,并返回结果。要求使用table.pack处理可变参数。

作业2:智能插入系统

创建一个空表,使用循环插入1到100的数字,但要求:

  • 偶数插入到表的前半部分
  • 奇数插入到表的后半部分
  • 使用table.insert实现

作业3:表安全复制

编写一个函数deepCopy,使用table.move实现表的深度复制。验证修改原表不会影响新表。

作业4:排行榜系统

给定玩家分数表{{"张三", 85}, {"李四", 92}, {"小五", 78}},使用table.sort按分数降序排序,并打印前三名。

作业5:数据清洗

给定物品列表{"装备_剑", "材料_木头", "装备_盾", "消耗品_药水", "装备_甲"},使用table.remove删除所有非装备类物品(不以"装备_"开头),并打印最终列表。


本文为《Lua速成班》系列课程实录整理。想系统学习 996 引擎 Lua 开发,请查看课程中心与更多技术文章。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

Lua速成班系统函数

Lua速成班 第十三课 系统函数第三节 string库 table库

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十三课 系统函数第三节 string库 table库」,主讲…

2026-10-30 23:26 浮生梦
Lua速成班系统函数

Lua速成班 第十一课 系统函数 第一节

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十一课 系统函数 第一节」,主讲:浮生梦。 课程体系:996…

2026-10-30 23:26 浮生梦
Lua速成班系统函数

Lua速成班 第十二课 系统函数第二节 string库

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十二课 系统函数第二节 string库」,主讲:浮生梦。 课…

2026-10-30 23:26 浮生梦
Lua速成班后端面向对象

Lua速成班 第九课 后端面向对象和事件推送

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:9…

2026-10-30 23:26 浮生梦
Lua速成班后端面向对象

Lua速成班 第十课 后端面向对象 class构造

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十课 后端面向对象 class构造」,主讲:浮生梦。 课程体…

2026-10-30 23:26 浮生梦
幂尔框架接口调用

print 大法:让代码自己交代问题

代码不说话, 让它自己说 。 print 是 Lua 战士的第一件武器——用好它,八成的 bug 不用看第二眼。 <styl…

2026-10-26 19:04 996 技术组