使用 Lua 按两个值对表进行排序?

我有以下的表格:

servers = {"ProtectedMethod" = {name = "ProtectedMethod", visits = 20, players = 2}, "InjecTive" = {name = "InjecTive", visits = 33, players = 1}};

我怎样能将 servers 表格中的子表格根据 players 和 visits 两个属性排序,也就是说,只有当两个表格的 players 值相同时,才根据 visits 进行排序。

例如,如果排序代码被放到 tableSort 函数中,那么我应该能够调用以下代码:

sorted = sort();
print(sorted[1].name .. ": " sorted[1].players .. ", " .. sorted[1].visits); --应该输出 "ProtectedMethod: 2, 20"
print(sorted[2].name .. ": " sorted[2].players .. ", " .. sorted[2].visits); --应该输出 "InjecTive: 1, 33"

谢谢。

点赞
用户18403
用户18403

你有一个哈希表,需要将它转换为数组并排序:

function mysort(s)
    -- 将哈希表转换为数组
    local t = {}
    for k, v in pairs(s) do
        table.insert(t, v)
    end

    -- 排序
    table.sort(t, function(a, b)
        if a.players ~= b.players then
            return a.players > b.players
        end

        return a.visits > b.visits
    end)
    return t
end

servers = {
    ProtectedMethod = {
        name = "ProtectedMethod", visits = 20, players = 2
    },

    InjecTive = {
        name = "InjecTive", visits = 33, players = 1
    }
}

local sorted = mysort(servers)
print(sorted[1].name .. ": " .. sorted[1].players .. ", " .. sorted[1].visits)
print(sorted[2].name .. ": " .. sorted[2].players .. ", " .. sorted[2].visits)
2014-07-22 18:41:04