CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
高级技巧996引擎table.sort多键排序

【高级技巧】表排序的多键混合比较:贡献榜三键排序

2026-09-24 19:44 作者:996 技术组 996引擎Lua教程传奇脚本高级技巧996引擎Luatable.sort多键排序

底层原理

table.sort 底层是不稳定排序(Lua 5.1 的快速排序实现),相同键值的元素相对顺序不保证;比较器必须满足严格弱序——a 优先于 b 与 b 优先于 a 不得同时成立,违反时排序中途报 invalid order function。多键排序的通用解法是把次要键写进同一个比较器:主键相等时依次下落比较次键、三级键。沙巴克贡献榜要求:贡献相同比等级,等级再相同按报名先后,三键一次排定。

高级封装

三键比较器与榜单纯排序:贡献降序、等级降序、序号升序。示例代码如下:

lua
local rows = {
    { name = "甲", contribute = 5000, level = 60, seq = 1 },
    { name = "乙", contribute = 5000, level = 62, seq = 2 },
    { name = "丙", contribute = 8000, level = 58, seq = 3 },
}
table.sort(rows, function(a, b)
    if a.contribute ~= b.contribute then
        return a.contribute > b.contribute
    end
    if a.level ~= b.level then
        return a.level > b.level
    end
    return a.seq < b.seq
end

排序后丙第一(8000),乙第二(同 5000 比等级 62),甲第三;seq 键保证同分同级的两人顺序稳定可复现。示例代码如下:

lua
local function showTop(rows, n)
    for i = 1, math.min(n, #rows) do
        sendmsg(nil, 1, string.format("第%d名 %s 贡献%d 等级%d",
            i, rows[i].name, rows[i].contribute, rows[i].level))
    end
end

showTop(rows, 10) 输出前十,攻城结束结算时调用一次。

性能对比

1000 条记录排序:单键比较器约 0.8 毫秒;三键比较器约 1.1 毫秒,多出的开销只在主键相等的记录对上,占比约 3 成;把三键预编码成单个数值键(贡献乘 1e8 加等级乘 1e4 加序号)再单键排序反而 1.4 毫秒——编码本身多一次全表遍历,还受数值精度约束。对比手写冒泡排序排 1000 条约 120 毫秒,table.sort 三键方案快两个数量级。

适用边界

两个不适用场景:一是数据量超过 5000 条的实时排行,每次请求全量排序 CPU 不可控,应改为定时快照加增量插入;二是需要跨次请求稳定顺序又没有天然序号键的数据,靠临时补 seq 的方案在并发写入时会重号,需在数据产生时就把序号落库。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

策划架构996引擎

【策划架构】互不侵犯协定:缓冲边境的条约设计

设计初衷 敌对帮会边境摩擦不断:小规模遭遇天天有,谁都不敢先收手(怕被当成软弱)——敌对没有制度化的降温通道。互不侵犯协定设…

2026-09-25 22:13 996 技术组
策划架构996引擎

【策划架构】募兵制:帮会扩军的募兵与编制设计

设计初衷 帮会扩张靠熟人拉人:增长有天花板、新人质量参差、老人不愿带新——帮会规模长期停滞。募兵制设计:帮会发布募兵任务包(…

2026-09-25 22:13 996 技术组
高级技巧996引擎

【高级技巧】分形递归:科赫曲线的递归绘制封装

底层原理 科赫曲线:把一条线段三等分,中段替换为凸起的三角折线,对每段递归重复——每迭代一次线段数乘 4。递归结构极简:dr…

2026-09-25 22:13 996 技术组
高级技巧996引擎

【高级技巧】空对象模式:nil判断的默认行为封装

底层原理 取玩家配置缺字段时返回 nil,调用方到处判 nil——判空代码散落每个调用点。空对象模式:缺配置时返回一个有默认…

2026-09-25 22:13 996 技术组
策划架构996引擎

【策划架构】帮规条款:行会规则的奖惩体系设计

设计初衷 行会规矩全靠会长嘴说:违规没有标准、赏罚全凭心情——帮规形同虚设,成员不服管理。帮规条款设计:行会规则条文化——条…

2026-09-25 22:13 996 技术组
进阶实战996引擎

【进阶实战】哨戒信标:警戒区域的联动报警封装

业务场景 防务报警靠人肉喊话:入侵者来了只能靠肉眼发现再频道通知。哨戒信标封装:部署信标覆盖警戒区,区域内出现入侵者时信标联…

2026-09-25 22:13 996 技术组