View difference between Paste ID: L85LDrQP and infWgAwU
SHOW: | | - or go back to the newest paste.
1
function sortGrouped(t)
2
	local users, precedence = {}, {}
3-
	for _, entry in ipairs(t) do
3+
	for i = #t, 1, -1 do 
4-
		local name = entry.name
4+
		local name = t[i].name
5-
		table.insert(users, name)
5+
		if not users[name] then
6-
		precedence[name] = math.min(entry.i, precedence[name] or math.huge)
6+
			table.insert(precedence, name)
7
			users[name] = {}
8-
	table.sort(users, function(a,b) return precedence[a] < precedence[b] end)
8+
		end
9-
	for i, name in ipairs(users) do
9+
		table.insert(users[name], table.remove(t))
10-
		users[name] = i
10+
11
	local function byI(a, b)
12-
	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)
12+
		return a.i > b.i
13
	end
14
	for name, list in pairs(users) do
15
		table.sort(list, byI)
16
	end
17
	table.sort(precedence, function(a, b) return users[a][1].i > users[b][1].i end)
18
	for _, name in ipairs(precedence) do
19
		for _, entry in ipairs(users[name]) do
20
			table.insert(t, entry)
21
		end
22
	end
23
end