0Pricing
Lua Academy · 课时

使用比较器调用 table.sort

使用自定义比较器函数和稳定排序策略对表进行排序。

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

什么是 table.sort?

table.sort 使用比较函数对表进行原地排序。如果不提供比较函数,则使用 < 运算符。

默认升序排序

对数字或字符串表调用 table.sort(t),即可按升序排序。

local nums = {5, 2, 8, 1, 9}
table.sort(nums)
for _, v in ipairs(nums) do print(v) end

自定义比较函数

将函数 function(a, b) return a < b end 作为第二个参数传入。

local words = {"banana", "apple", "cherry"}
table.sort(words, function(a, b) return a < b end)
print(table.concat(words, ", "))

降序排序

反转比较关系即可按降序排序。

local nums = {3, 1, 4, 1, 5, 9}
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", "))

按字段对表排序

根据指定字段键对记录数组进行排序。

local people = {
  {name="Charlie", age=30},
  {name="Alice", age=25},
  {name="Bob", age=28}
}
table.sort(people, function(a, b) return a.age < b.age end)
for _, p in ipairs(people) do print(p.name, p.age) end

多键排序

先按主键排序;如果主键相同,再按次键排序。

table.sort(people, function(a, b)
  if a.age ~= b.age then return a.age < b.age end
  return a.name < b.name
end)

稳定性说明

Lua 的 table.sort不保证稳定。相等元素可能以任意顺序出现。请使用索引作为平局决胜依据,以获得确定性结果。

不区分大小写地排序字符串

在比较函数中使用 string.lower 进行规范化。

table.sort(words, function(a, b)
  return a:lower() < b:lower()
end)

使用键提取器排序

使用施瓦茨变换方法缓存提取出的键,避免排序过程中重复计算。

local function sortBy(t, keyFn)
  local keyed = {}
  for i, v in ipairs(t) do keyed[i] = {val=v, key=keyFn(v)} end
  table.sort(keyed, function(a, b) return a.key < b.key end)
  for i, item in ipairs(keyed) do t[i] = item.val end
end

对大型表排序

对于非常大的表,请考虑使用施瓦茨变换:将每个元素与其排序键配对,排序后再提取元素。这样可以避免在每次比较时重新计算键。

原地排序与复制排序

table.sort 会修改原表。若要对副本排序,请先使用 table.move 或通过遍历创建副本,然后对副本排序。

比较函数问题

哪个比较函数会按升序排列数字?

回顾:table.sort

table.sort 会原地排序,接受可选的比较函数,但不保证稳定;对于复杂的排序要求,通常会结合基于字段或多键的策略使用。

常见问题解答

「使用比较器调用 table.sort」课时是免费的吗?

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

「使用比较器调用 table.sort」这节课中我会学到什么?

使用自定义比较器函数和稳定排序策略对表进行排序。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Lua Academy 需要有经验吗?

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

「使用比较器调用 table.sort」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 使用比较器调用 table.sort
  2. table.concat 和 table.move
  3. 深拷贝和浅拷贝
  4. 转换表:map、filter、reduce
← 返回 Lua Academy