课时 7 · 表的高级用法
课时 7 · 表的高级用法(Lua 语言基础):理解表的引用特性与常用操作。含可运行的示例代码、练习与验收要点,示例锁定 Lua 5.1,可在站内在线运行验证。
本课的代码可以就地复制;点代码块右上角的「运行这段」, 会带着这段代码打开 Lua 在线运行器 并直接跑出结果 (课程示例统一按 5.1 跑;运行器里也能切到 5.3)。
本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。
本课目标
- 理解表的引用特性与常用操作。
知识讲解
表是引用类型:把一个表赋值给另一个变量,两者指向同一份数据。table 库提供 insert、remove、sort、concat 等常用函数。队列可用 table.insert(t, v) 入队、table.remove(t, 1) 出队;栈用 insert/remove 在末尾操作。复制表需要手动逐键拷贝(浅拷贝)或递归(深拷贝)。
示例:引用与 table 库
local a = {3, 1, 2}
local b = a -- 引用同一份数据
table.insert(b, 4)
print(#a) -- 4(a 也变了)
table.sort(a)
for _, v in ipairs(a) do print(v) end -- 1 2 3 4
local copy = {}
for k, v in pairs(a) do copy[k] = v end -- 浅拷贝
练习任务
- 实现背包物品的增删查改:按名称查找、按索引删除、修改数量、按名称排序。
参考:增删查改
local bag = {{ name = '铁矿', count = 50 }, { name = '金创药(小量)', count = 10 }}
-- 查
function find(name)
for i, item in ipairs(bag) do
if item.name == name then return i, item end
end
end
-- 删
local idx = find('铁矿')
if idx then table.remove(bag, idx) end
-- 改
bag[1].count = bag[1].count + 5
-- 排序
table.sort(bag, function(x, y) return x.name < y.name end)
本篇依据
- 《996 新三端 Lua 开发教学技术手册》课时 7
参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。