You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lua中对订单数组排序:将state=0的未完成订单置于前列?

在Lua中按订单状态排序(未完成在前,已配送在后)

要实现将订单数组按state字段分组排序,让state=0(未完成)的订单排在列表顶部,state=1(已配送)的排在末尾,直接用table.sort配合正确的比较函数就能解决问题。

正确实现代码

-- 示例输入数组
local orders = {
    {state=1, id=1},
    {state=0, id=2},
    {state=0, id=3},
    {state=0, id=4},
    {state=1, id=5}
}

-- 自定义排序比较函数
table.sort(orders, function(a, b)
    -- 规则:state=0的优先级高于state=1,所以当a是0、b是1时,a排在b前面
    return a.state < b.state
end)

-- 输出排序后的数组(遍历验证)
for _, order in ipairs(orders) do
    print(string.format("state=%d, id=%d", order.state, order.id))
end

代码说明

table.sort的比较函数需要返回一个布尔值:返回true时,表示第一个参数a应该排在第二个参数b的前面。这里利用0 < 1的数值关系,直接用a.state < b.state就能满足需求——所有state=0的元素会被排在state=1的元素之前。

如果你之前尝试table.sort没成功,大概率是比较条件写反了(比如用了a.state > b.state),导致state=1的订单被排到了前面。

运行结果

执行上述代码后,输出顺序为:

state=0, id=2
state=0, id=3
state=0, id=4
state=1, id=1
state=1, id=5

内容的提问来源于stack exchange,提问作者Barracuda ake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:20:49