function sortGrouped(t) local users, precedence = {}, {} for i = #t, 1, -1 do local name = t[i].name if not users[name] then table.insert(precedence, name) users[name] = {} end table.insert(users[name], table.remove(t)) end local function byI(a, b) return a.i > b.i end for name, list in pairs(users) do table.sort(list, byI) end table.sort(precedence, function(a, b) return users[a][1].i > users[b][1].i end) for _, name in ipairs(precedence) do for _, entry in ipairs(users[name]) do table.insert(t, entry) end end end