如何在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
相关产品推荐
相关产品推荐

