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