首页 > 解决方案 > 将lua中的表排序为多个组

问题描述

我需要对列表进行排序,_rolls以考虑用户的滚动和排名。

_rolls = {
    {Username="User1", Roll=50, RankPrio=1},
    {Username="User2", Roll=2, RankPrio=3},
    {Username="User4", Roll=10, RankPrio=2},
    {Username="User5", Roll=9, RankPrio=2},
    {Username="User3", Roll=32, RankPrio=2}
}

我希望列表排序为

_rolls = {
    {Username="User2", Roll=2, RankPrio=3},
    {Username="User3", Roll=32, RankPrio=2},
    {Username="User4", Roll=10, RankPrio=2},
    {Username="User5", Roll=9, RankPrio=2},
    {Username="User1", Roll=50, RankPrio=1}
}

我知道我可以用它来按劳斯莱斯排序,但我看不出两种方法都可以。

table.sort(_rolls, function(a,b) return a.Roll < b.Roll end)

标签: sortinglua

解决方案


您只需要编写比较函数,以便在字段比较相等Roll时比较字段:RankPrio

_rolls = {
    {Username="User1", Roll=50, RankPrio=1},
    {Username="User2", Roll=2, RankPrio=3},
    {Username="User4", Roll=10, RankPrio=2},
    {Username="User5", Roll=9, RankPrio=2},
    {Username="User3", Roll=32, RankPrio=2}
}

table.sort(_rolls,
           function (a, b)
             if a.RankPrio == b.RankPrio then
               return b.Roll < a.Roll
             else return b.RankPrio < a.RankPrio
             end
end)
> table.inspect(_rolls)
1 = 
    RankPrio = 3
    Username = User2
    Roll = 2
2 = 
    RankPrio = 2
    Username = User3
    Roll = 32
3 = 
    RankPrio = 2
    Username = User4
    Roll = 10
4 = 
    RankPrio = 2
    Username = User5
    Roll = 9
5 = 
    RankPrio = 1
    Username = User1
    Roll = 50

推荐阅读