J'ai une table Lua que j'essaie de trier. Le format du tableau est le suivant:
tableOfKills[PlayerName] = NumberOfKills
Ce qui signifie, par exemple, si j'avais un joueur nommé Robin avec un total de 8 éliminations et un autre nommé Jon avec un total de 10 éliminations, le tableau serait:
tableOfKills[Robin] = 8
tableOfKills[Jon] = 10
Comment pourrais-je trier ce type de tableau pour afficher en premier les tués les plus élevés? Merci d'avance!
Une table dans Lua est un ensemble de mappages de valeurs-clés avec des clés uniques. Les paires sont stockées dans un ordre arbitraire et par conséquent, la table n'est triée en aucune façon.
Ce que vous pouvez faire est itérer sur la table dans un certain ordre. La base pairs
ne vous donne aucune garantie de l'ordre dans lequel les clés sont visitées. Voici une version personnalisée de pairs
, que j'ai appelée spairs
car elle itère sur la table dans un ordre trié:
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
Voici un exemple d'utilisation d'une telle fonction:
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