添加和移除项目
使用 table.insert 和 remove。
添加和移除项目 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
扩展序列
实际的列表会在程序运行期间改变大小。Lua 提供了 table.insert,用于在末尾追加项目。
由于序列的索引从 1 开始,在已有两个项目后追加的项目会位于索引 3。
local list = {"a", "b"}
table.insert(list, "c")
print(list[1], list[2], list[3])table.insert 追加项目
传入两个参数时,table.insert(t, value) 会将 value 放在当前最后一个索引之后的位置。
每次调用都会让序列增长一项,并保持索引连续。
local q = {}
table.insert(q, "first")
table.insert(q, "second")
print(q[1], q[2])在指定位置插入
传入三个参数时,table.insert(t, pos, value) 会在索引 pos 处插入项目,并将后面的项目向后移动。
这里将 "X" 放在位置 2,因此原来的第二项会移动到位置 3。
local list = {"a", "b", "c"}
table.insert(list, 2, "X")
print(list[1], list[2], list[3], list[4])在开头插入
要在开头添加项目,请在位置 1 插入。每个已有元素都会向后移动一个索引。
这种方式很方便,但处理大型列表时速度较慢,因为 Lua 必须移动所有项目。
local list = {"b", "c"}
table.insert(list, 1, "a")
print(list[1], list[2], list[3])删除最后一项
使用一个参数调用 table.remove(t) 会删除并返回最后一个元素。
序列会缩短一项,同时保持没有空缺。
local list = {"a", "b", "c"}
local gone = table.remove(list)
print("removed:", gone)
print(list[1], list[2], list[3])在指定位置删除
table.remove(t, pos) 会删除 pos 处的项目,并将后面的项目向前移动以填补空缺。
请记住,位置的索引从 1 开始,因此 pos = 1 会删除第一项。
local list = {"a", "b", "c"}
local gone = table.remove(list, 1)
print("removed:", gone)
print(list[1], list[2])remove 返回该值
table.remove 的两种形式都会返回所删除的值,因此您可以立即使用它。
这样一来,表就可以充当堆栈:使用 insert 入栈,使用 remove 出栈。
local stack = {}
table.insert(stack, 10)
table.insert(stack, 20)
local top = table.remove(stack)
print("popped:", top)简单队列
在末尾插入,并从开头(pos = 1)删除,就可以模拟队列:先进先出。
每次删除都会将其余项目向前移动,因此下一个项目会在索引 1 处等待。
local queue = {}
table.insert(queue, "Ann")
table.insert(queue, "Bob")
print("serving:", table.remove(queue, 1))
print("next:", queue[1])避免手动制造空缺
使用 list[2] = nil 将元素设为 nil,可能会在中间留下空缺,从而破坏序列。
建议使用 table.remove,它会移动项目并保持索引连续。
local list = {"a", "b", "c"}
table.remove(list, 2)
print(list[1], list[2])从输入构建
一种常见模式是:从空表开始,随着数据到来不断追加。
这里使用 insert 将偶数收集到一个新的序列中。
local evens = {}
for n = 1, 6 do
if n % 2 == 0 then
table.insert(evens, n)
end
end
print(evens[1], evens[2], evens[3])同时使用 insert 和 remove
您可以自由组合这些操作。下面先追加三个姓名,然后删除中间的一个。
删除后,列表中还剩两个连续的项目。
local names = {}
table.insert(names, "Al")
table.insert(names, "Bea")
table.insert(names, "Cy")
table.remove(names, 2)
print(names[1], names[2])快速检查
思考删除操作会如何移动序列。
回顾
您学会了使用 table.insert 扩展列表(在末尾追加,或在从 1 开始的位置插入),以及使用 table.remove 缩短列表;后者会返回被删除的值并填补空缺。
请避免手动制造 nil 空缺。接下来,您将使用 ipairs 进行整齐的遍历。
常见问题解答
「添加和移除项目」课时是免费的吗?
是的 — 「添加和移除项目」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「添加和移除项目」这节课中我会学到什么?
使用 table.insert 和 remove。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「添加和移除项目」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 将数组作为表使用
- 添加和移除项目
- 使用 ipairs 进行迭代
- 长度与排序