In Lua, wie entferne ich eine Tabelle innerhalb einer Tabelle?
Frage
Zum Beispiel:
items = {
[753] = {
},
[192] = {
},
[789] = {
},
[791] = {
},
[790] = {
},
[776] = {
},
}
Ich möchte in der es 789 und alle Daten entfernen. Ich habe versucht, beide: table.remove (item, 2); und table.remove (item, 789); (Ich war nicht sicher, wie die Indizierung gearbeitet) ohne Glück.
Lösung
Es ist so einfach wie
items[789] = nil
In Lua, wenn ein Schlüssel in einer Tabelle einen nil
Wert hat, dann wie es ist wenn der Schlüssel nicht existiert.
> t = { [5] = {}, [10] = {} }
> for k,v in pairs(t) do print(k,v) end
5 table: 0037CBC0
10 table: 0037CBE8
> t[5] = nil
> for k,v in pairs(t) do print(k,v) end
10 table: 0037CBE8
Siehe auch Progamming in Lua, Abschnitt 2.5 . (Auch wenn die Online-Version für Lua 5.0 geschrieben ist, gilt dies immer noch zu Lua 5.1)
... Sie null auf ein Tabellenfeld zuweisen kann es zu löschen.
Wenn Sie nil
zu Ihrem Index zuweisen, die nicht explizit löschen, was zuvor in diesem Index gespeichert wurde; aber es hat für den Referenzzähler senken, was dort gespeichert wurde, möglicherweise macht es für die Garbage Collection in Anspruch nehmen.