Question

Je ne peux pas obtenir l'index d'entrée de table. J'ai besoin pour supprimer un élément de la table.

J'utilise table.insert pour ajouter des entrées à la table.

Une autre question: pourquoi Lua n'a pas « surcharge » pour fonctionner table.remove si on peut supprimer l'élément par index associatif

?
Était-ce utile?

La solution

t[k]=nil retire de t l'entrée avec k touche.

Pour la deuxième question, la réponse est que les tables peuvent avoir métatables individuels.

Autres conseils

Les tableaux mettent en œuvre un grand nombre à un non-ordonnée relation entre les clés et les valeurs. En d'autres termes, une clé particulière (index) ne peut apparaître qu'une fois dans une table, mais une valeur peut apparaître plusieurs fois.

Si vous connaissez la k clé, puis t[k] = nil supprimera la clé et la valeur associée de la table. Toutefois, cette opération n'a pas d'effet sur les autres clés ou des valeurs dans le tableau.

Les fonctions de table.insert et table.remove opèrent sur l'ensemble des touches de nombres entiers séquentiels commençant à 1, qui sont utilisés par convention à mettre en œuvre des tableaux ou des listes. A cet effet, ils manipulent d'autres valeurs dans la liste afin de maintenir la liste de développer des trous.

Une façon de trouver une clé à laquelle une certaine valeur se trouve est de rechercher simplement la table. Si cela se fera plus d'une fois, alors il est probablement une bonne idée de construire une deuxième table qui inverse les paires clé / valeur afin que recherche par valeur est aussi rapide que recherche par index.

Une mise en œuvre appropriée dépendra de vos hypothèses et besoins. Quelques exemples sont:

-- return the first integer index holding the value 
function AnIndexOf(t,val)
    for k,v in ipairs(t) do 
        if v == val then return k end
    end
end

-- return any key holding the value 
function AKeyOf(t,val)
    for k,v in pairs(t) do 
        if v == val then return k end
    end
end

-- return all keys holding the value
function AllKeysOf(t,val)
    local s={}
    for k,v in pairs(t) do 
        if v == val then s[#s+1] = k end
    end
    return s
end

-- invert a table so that each value is the key holding one key to that value 
-- in the original table.
function Invert(t)
    local i={}
    for k,v in pairs(t) do 
        i[v] = k
    end
    return i
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top