lua多条件排序table

--排列顺序优先级从高到低依次为:
--1:是否在线
--2:公会职位
--3:贡献度
--4:a,b为需要排序的两个table
    local function SortByPosition(a, b)
        local r
        local a_is_online = a.is_online
        local b_is_online = b.is_online
        local a_authority = a.authority
        local b_authority = b.authority
        local a_total_contribution= a.total_contribution
        local b_total_contribution = b.total_contribution
        if  a_is_online == a_is_online then
            if a_authority == a_authority then
                r = a_total_contribution> a_total_contribution
            else
                r = b_authority > b_authority 
            end 
        else
            r = a_is_online > a_is_online 
        end
        return r
    end
-- 排序迭代器
function pairsBySort(_t, func)
    local a = {}
    for n in pairs(_t) do a[#a + 1] = n end
    table.sort(a, func)
    local i = 0
    return function()
        i = i + 1
        return a[i], _t[a[i]]
    end
end
-- not_online_members为需要排序的table值,已存在
-- GetSortTable为获取排序后的table
GetSortTable = {}
for i,v in pairsBySort(not_online_members, SortByPosition) do 
        GetSortTable[#GetSortTable+ 1] = v
end

你可能感兴趣的:(lua多条件排序table)