Ich habe eine Lua-Tabelle, die ich als Hashmap verwende, dh mit String-Schlüsseln:
local map = { foo = 1, bar = 2 }
Ich möchte ein Element dieser Tabelle "platzen" lassen, das durch seinen Schlüssel identifiziert wird. Es gibt eine table.remove()
Methode, die jedoch nur den Index des zu entfernenden Elements (dh eine Zahl) und keinen generischen Schlüssel benötigt. Ich würde gerne dazu in der Lage sein table.remove(map, 'foo')
und hier ist, wie ich es implementiert habe:
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
Gibt es einen besseren Weg, das zu tun?
Antworten:
Nein, das Setzen des Schlüsselwerts auf
nil
ist die akzeptierte Methode zum Entfernen eines Elements im Hashmap-Teil einer Tabelle. Was Sie tun, ist Standard. Ich würde jedoch empfehlen, nicht zu überschreiben.table.remove()
Für den Array-Teil einer Tabelle umfasst die Standardfunktionalität table.remove () die Neunummerierung der Indizes, was bei Ihrer Überschreibung nicht der Fall wäre. Wenn Sie Ihre Funktion zumtable
Funktionssatz hinzufügen möchten, würde ich sie wahrscheinlich sotable.removekey()
oder so nennen.quelle
table.removekey()
wäre auch meine beste Wahl).table.insert
undtable.remove
in den lokalen Namespace, wenn ich sie häufig benutze, oft als so etwas wietinsert()
undtremove()
.