本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十三课 系统函数第三节 string库 table库」,主讲:浮生梦。 课程体系:996 引擎传奇开发教学 · 威海旷世互娱教学基地
功能说明
将表中的所有元素连接成一个字符串,可以指定分隔符和起始结束位置。
核心用途
性能对比
手动迭代拼接 vs table.concat:
参数详解
练习题代码
-- 练习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)
功能说明
向表中插入元素,支持在指定位置插入或默认在末尾追加。
核心机制
内存扩容原理
练习题代码
-- 练习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
功能说明
将源表中指定范围的元素移动到目标表,支持表复制和表合并。
参数详解
核心用途
表复制 vs 表引用
练习题代码
-- 练习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)
功能说明
删除表中指定位置的元素,返回被删除的值。默认删除最后一个元素。
核心特性
实际应用场景
练习题代码
-- 练习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
功能说明
对表元素进行排序,默认升序。支持自定义比较函数实现复杂排序逻辑。
参数详解
核心用途
练习题代码
-- 练习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
功能说明
将多个元素打包成表,自动添加n字段记录元素数量。
核心特性
练习题代码
-- 练习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停止)
功能说明
将表解包为多个返回值,支持指定范围解包。
核心用途
版本差异
练习题代码
-- 练习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)
作业1:字符串拼接器
编写一个函数,接收任意数量的字符串参数,使用table.concat将它们用" | "连接,并返回结果。要求使用table.pack处理可变参数。
作业2:智能插入系统
创建一个空表,使用循环插入1到100的数字,但要求:
作业3:表安全复制
编写一个函数deepCopy,使用table.move实现表的深度复制。验证修改原表不会影响新表。
作业4:排行榜系统
给定玩家分数表{{"张三", 85}, {"李四", 92}, {"小五", 78}},使用table.sort按分数降序排序,并打印前三名。
作业5:数据清洗
给定物品列表{"装备_剑", "材料_木头", "装备_盾", "消耗品_药水", "装备_甲"},使用table.remove删除所有非装备类物品(不以"装备_"开头),并打印最终列表。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十三课 系统函数第三节 string库 table库」,主讲…
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十一课 系统函数 第一节」,主讲:浮生梦。 课程体系:996…
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十二课 系统函数第二节 string库」,主讲:浮生梦。 课…
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:9…
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十课 后端面向对象 class构造」,主讲:浮生梦。 课程体…
代码不说话, 让它自己说 。 print 是 Lua 战士的第一件武器——用好它,八成的 bug 不用看第二眼。 <styl…