alestane icon

Precedence sorter

alestane | PRO | 06/20/13 07:58:14 PM UTC | 0 ⭐ | 317 👁️ | Never ⏰ | []
Lua |

470 B

|

None

|

0 👍

/

0 👎

function sortGrouped(t)
    local users, precedence = {}, {}
    for _, entry in ipairs(t) do
        local name = entry.name
        table.insert(users, name)
        precedence[name] = math.min(entry.i, precedence[name] or math.huge)
    end
    table.sort(users, function(a,b) return precedence[a] < precedence[b] end)
    for i, name in ipairs(users) do
        users[name] = i
    end
    table.sort(t, function(a, b) if a.name == b.name then return a.i < b.i else return users[a.name] < users[b.name] end end)
end

Comments