Frage

Ich kann nicht Tabelleneintrag Index erhalten. Ich brauche es ein Element aus der Tabelle zu entfernen.

Ich verwende table.insert Einträge Tabelle hinzuzufügen.

Eine andere Frage: warum Lua hat keine „Überlast“ auf Funktion table.remove so ein Element von assoziativen Index entfernen

War es hilfreich?

Lösung

t[k]=nil entfernt von t der Eintrag mit dem Schlüssel k.

Für die zweite Frage, die Antwort ist, dass Tabellen einzelne Metatables haben.

Andere Tipps

Tabellen ein ungeordnetes one to many Beziehung zwischen Schlüsseln und Werten umzusetzen. Mit anderen Worten kann eine bestimmte Taste (Index) erscheint nur einmal in einer Tabelle, sondern ein Wert mehrfach auftreten kann.

Wenn Sie den Schlüssel k kennen, dann wird t[k] = nil sowohl den Schlüssel und den zugehörigen Wert aus der Tabelle. Jedoch hat dieser Vorgang keinen Einfluss auf alle anderen Schlüssel oder Werte in der Tabelle.

Die table.insert und table.remove Funktionen arbeiten über den Satz von aufeinanderfolgenden ganzzahligen Schlüssel bei 1 beginnend, die durch Konvention verwendet Arrays oder Listen zu implementieren. Zu diesem Zweck manipulieren sie andere Werte in der Liste, um die Liste von Entwicklungsbohrungen zu halten.

Eine Möglichkeit, einen Schlüssel, bei dem einige Wert gefunden zu finden, ist einfach in der Tabelle zu suchen. Wenn dies mehr als einmal durchgeführt werden, dann ist es wahrscheinlich eine gute Idee, eine zweite Tabelle zu erstellen, dass der Schlüssel / Wert-Paare umkehrt, so dass Nachschlag von Wert so schnell wie Lookup durch Index ist.

Eine geeignete Implementierung wird Ihre Annahmen und Bedürfnisse abhängig sind. Einige Beispiele sind:

-- 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top