Aller au contenu

Module:Lib table tri

Une page de Wikiversité, la communauté pédagogique libre.

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.

Éditer cette documentation


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