Erster Tabelleneintrag Index
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
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