sorting - script - push array lua
Ordenar una tabla[] en Lua (1)
Una tabla en Lua es un conjunto de asignaciones de clave-valor con claves únicas. Los pares se almacenan en orden arbitrario y, por lo tanto, la tabla no está ordenada de ninguna manera.
Lo que puede hacer es iterar sobre la tabla en algún orden. Los pairs
básicos no le garantizan el orden en que se visitan las claves. Aquí hay una versión personalizada de pairs
, que llamé spairs
porque itera sobre la tabla en un orden ordenado:
function spairs(t, order)
-- collect the keys
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end
-- if order function given, sort by it by passing the table and keys a, b,
-- otherwise just sort the keys
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end
-- return the iterator function
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end
end
Aquí hay un ejemplo de uso de dicha función:
HighScore = { Robin = 8, Jon = 10, Max = 11 }
-- basic usage, just sort by the keys
for k,v in spairs(HighScore) do
print(k,v)
end
--> Jon 10
--> Max 11
--> Robin 8
-- this uses an custom sorting function ordering by score descending
for k,v in spairs(HighScore, function(t,a,b) return t[b] < t[a] end) do
print(k,v)
end
--> Max 11
--> Jon 10
--> Robin 8
Tengo una mesa de Lua que estoy tratando de ordenar. El formato de la tabla es el siguiente:
tableOfKills[PlayerName] = NumberOfKills
Lo que significa, por ejemplo, si tuviera un jugador llamado Robin con un total de 8 asesinatos y otro llamado Jon con un total de 10 asesinatos, la tabla sería:
tableOfKills[Robin] = 8
tableOfKills[Jon] = 10
¿Cómo ordenaría ese tipo de tabla para mostrar primero las muertes más altas? ¡Gracias por adelantado!