Module:Lib table tri
Librairie de fonctions Lua relatives au tri de tables.
( ajouter une fonction pour inverser l’ordre de tri: inv() = function(a, b) return b < a end )
- pairsByKeys tri la table sur la clé (k) (lorsque celle-ci n’est pas un index automatique), correspond à la fonction pairs triée sur k.
- spairs tri la table sur la valeur (v) ; itération de la table triée sur v.
function pairsByKeys(t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0 -- iterator variable
local iter = function () -- iterator function
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
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