0Pricing
Lua Academy · 课时

长度与排序

统计并排序序列。

长度与排序 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。

长度运算符

# 运算符会返回序列中项目的数量。

对于包含三个元素、结构完整且从 1 开始的表,#t 的值是 3。最后一个项目位于索引 #t 处。

local list = {"a", "b", "c"}
print(#list)
print(list[#list])

在循环中获取长度

将 #t 用作数值 for 循环的上限,即可访问每个索引。

由于序列从 1 开始,范围是 1, #t。

local nums = {10, 20, 30, 40}
for i = 1, #nums do
  print(i, nums[i])
end

空表

空序列的长度为 0。

因此,使用 #t == 0 可以快速检查列表是否包含任何项目。

local empty = {}
print(#empty)
if #empty == 0 then
  print("list is empty")
end

修改后的长度

使用 table 函数添加或删除项目时,# 会相应更新。

insert 会增加数量,remove 会减少数量。

local list = {"a", "b"}
table.insert(list, "c")
print(#list)
table.remove(list)
print(#list)

空缺会破坏长度计算

# 只有在序列没有空缺时才可靠。出现空缺可能会使结果未定义。

请使用 table.insert 和 table.remove,这样 # 才能保持可靠。

local good = {1, 2, 3}
print(#good)
table.insert(good, 4)
print(#good)

原地排序

table.sort(t) 会原地重新排列序列,默认从小到大排序。

它会修改原表,而不是返回一个新表。

local nums = {3, 1, 2}
table.sort(nums)
print(nums[1], nums[2], nums[3])

对字符串排序

字符串默认按字母顺序排序,逐个字符进行比较。

排序后,索引 1 存放顺序中的第一个项目。

local names = {"Cy", "Ann", "Bob"}
table.sort(names)
print(names[1], names[2], names[3])

降序排列

传入比较函数即可控制顺序。返回 a > b 会让较大的项目排在前面。

该函数决定 a 是否应排在 b 前面。

local nums = {3, 1, 4, 2}
table.sort(nums, function(a, b)
  return a > b
end)
print(nums[1], nums[2], nums[3], nums[4])

自定义比较

比较器允许您按照任意规则排序,例如按照字符串长度而不是字母顺序排序。

下面的示例会让较短的单词排在前面。

local words = {"hello", "hi", "howdy"}
table.sort(words, function(a, b)
  return #a < #b
end)
print(words[1], words[2], words[3])

长度与排序

把这些工具结合起来:先对列表排序,再根据位置读取两端的项目。

升序排序后,最小值位于索引 1,最大值位于索引 #t。

local data = {7, 2, 9, 4}
table.sort(data)
print("min:", data[1])
print("max:", data[#data])

先排序再迭代

一种常见流程是:先对序列排序,然后使用 ipairs 按顺序遍历并输出。

排序会重新排列同一个从 1 开始的表,因此迭代会遵循新的顺序。

local scores = {50, 10, 30}
table.sort(scores)
for i, s in ipairs(scores) do
  print(i, s)
end

快速检查

回想一下长度运算符会为您提供什么。

回顾

您学会了:#t 会统计没有空缺的序列中的项目数量,最后一个项目位于 t[#t],而 table.sort 会原地重新排列项目(默认升序,也可以使用自定义比较器)。

结合 insert、remove 和 ipairs,您现在可以自信地管理 Lua 序列了。

常见问题解答

「长度与排序」课时是免费的吗?

是的 — 「长度与排序」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。

「长度与排序」这节课中我会学到什么?

统计并排序序列。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Lua Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「长度与排序」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Lua Academy 课中编写并运行代码吗?

能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 将数组作为表使用
  2. 添加和移除项目
  3. 使用 ipairs 进行迭代
  4. 长度与排序
← 返回 Lua Academy