Search code examples
sortinglualua-table

Lua - Sorting a Table by String


I have made a LUA table like so for my scoreboard:

Score.Ranks = {}

Score.Ranks["superadmin"]     = {name = "Boss", col = Color(183, 109, 253) }
Score.Ranks["operator"]       = {name = "Chief", col = Color(254, 129, 1) }
Score.Ranks["commander"]      = {name = "Commander", col = Color(222, 54, 54) }
Score.Ranks["moderator"]      = {name = "Director", col = Color(53, 225, 227) }

I want to sort this Table such that the 'names' are sorted in the following order when displayed on my scoreboard:

Boss
Director
Commander
Chief

How can I do this?


Solution

  • you can only sort a table with numeric indexes,so first convert the table:

    Score.Ranks = {}
    
    Score.Ranks["operator"]       = {name = "Chief", col = Color(254, 129, 1) }
    Score.Ranks["superadmin"]     = {name = "Boss", col = Color(183, 109, 253) }
    Score.Ranks["commander"]      = {name = "Commander", col = Color(222, 54, 54) }
    Score.Ranks["moderator"]      = {name = "Director", col = Color(53, 225, 227) }
    
    local tmp_t = {}
    for k,v in pairs(Score.Ranks) do
        local rank = (k=="superadmin") and 1 or (k=="operator" and 3 or 2) 
        table.insert(tmp_t, { rank = rank .. v.name, key = k, name = v.name, col = v.col} )
    end
    

    then the table is sorted by name and then use it.

        table.sort(tmp_t ,  function (a, b) return  (a.rank <  b.rank ) end)        
        for k,v in pairs(tmp_t) do
             print(k , v.rank, v.key, v.name)
        end