课时 7 · 表的高级用法

课时 7 · 表的高级用法(Lua 语言基础):理解表的引用特性与常用操作。含可运行的示例代码、练习与验收要点,示例锁定 Lua 5.1,可在站内在线运行验证。

教程/第一部分 · Lua 语言基础更新于 2026-10-073 个小节 教程第 9 / 23 篇 Lua基础语法

本课的代码可以就地复制;点代码块右上角的「运行这段」, 会带着这段代码打开 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

参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。