简体   繁体   English

将 lua 中的表排序为多组

[英]Sort table in lua as multible groups

I need to sort a list _rolls to have both the users rolls and ranks taken into considerations.我需要对列表_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}
}

I want the list to be sorted like我希望列表排序为

_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}
}

i know i can use this to sort by Rolls but i cant see a way to do both.我知道我可以用它来按劳斯莱斯排序,但我看不出两种方法都可以。

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

You just need to write the comparison function so that it compares the Roll fields when the RankPrio fields compare equal:您只需要编写比较 function 以便在RankPrio字段比较相等时比较Roll字段:

_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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM