Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 按两个值排序表?_Sorting_Lua_Lua Table - Fatal编程技术网

Sorting 按两个值排序表?

Sorting 按两个值排序表?,sorting,lua,lua-table,Sorting,Lua,Lua Table,因此,我有下表: servers = {"ProtectedMethod" = {name = "ProtectedMethod", visits = 20, players = 2}, "InjecTive" = {name = "InjecTive", visits = 33, players = 1}}; 我如何将servers表中的子表排序到一个新数组中,首先基于玩家,然后是访问次数,这意味着除非两个表的玩家值相同,否则不会按访问次数排序 例如,如果将排序代码放入名为tableSort

因此,我有下表:

servers = {"ProtectedMethod" = {name = "ProtectedMethod", visits = 20, players = 2}, "InjecTive" = {name = "InjecTive", visits = 33, players = 1}};
我如何将servers表中的子表排序到一个新数组中,首先基于玩家,然后是访问次数,这意味着除非两个表的玩家值相同,否则不会按访问次数排序

例如,如果将排序代码放入名为tableSort的函数中,我应该能够调用以下代码:

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

TIA

您有一个散列,因此需要将其转换为数组,然后进行排序:

function mysort(s)
    -- convert hash to array
    local t = {}
    for k, v in pairs(s) do
        table.insert(t, v)
    end

    -- sort
    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)

您有一个散列,因此需要将其转换为数组,然后进行排序:

function mysort(s)
    -- convert hash to array
    local t = {}
    for k, v in pairs(s) do
        table.insert(t, v)
    end

    -- sort
    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)

请再澄清一下这个问题。您有
visions=20,players=2
,而
sorted[1]。players,sorted[1]。visions
为您提供
20,2
?抱歉,这是反向的。应改为“2,20”。我会更新帖子的。请进一步澄清这个问题。您有
visions=20,players=2
,而
sorted[1]。players,sorted[1]。visions
为您提供
20,2
?抱歉,这是反向的。应改为“2,20”。我会更新这篇文章的,我觉得很有效。非常感谢!;)我想这很有效。非常感谢!;)