script array sorting lua lua-table

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!