Sort table in lua as multible groups

Viewed 63

I need to sort a list _rolls to have both the users rolls and ranks taken into considerations.

_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)
1 Answers

You just need to write the comparison function so that it compares the Roll fields when the RankPrio fields compare equal:

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