luatable.sort

local function compare_with_flag(a, b)
-- 如果a和b都有标志,则按照它们的某个字段进行排序
if a.flag and b.flag then
return a.sort_field < b.sort_field -- 假设有一个sort_field字段用于排序
-- 如果a有标志而b没有,则a应该排在b前面
elseif a.flag and not b.flag then
return true
-- 如果b有标志而a没有,则b应该排在a前面(实际上这种情况不会发生,因为a已经在前面了)
elseif not a.flag and b.flag then
return false
-- 如果a和b都没有标志,则它们的顺序可以是任意的,或者你也可以按照某个字段进行排序
else
return false -- 这里简单地让没有标志的元素保持原顺序
end
end

local my_table = {
{flag = true, sort_field = 3},
{flag = false, sort_field = 1},
{flag = true, sort_field = 2},
{flag = false, sort_field = 4},
}

-- 使用自定义比较函数对table进行排序
table.sort(my_table, compare_with_flag)

-- 打印排序后的table
for _, v in ipairs(my_table) do
print(v.flag, v.sort_field)
end

posted @ 2024-05-08 15:28  mc宇少  阅读(2)  评论(0编辑  收藏  举报