Mam tabelę lua, której używam jako hashmap, czyli z kluczami ciągów:
local map = { foo = 1, bar = 2 }
Chciałbym „wyskoczyć” z elementu tej tabeli identyfikowanego przez jego klucz. Istnieje table.remove()
metoda, ale wymaga ona tylko indeksu elementu do usunięcia (tj. Liczby), a nie klucza ogólnego. Chciałbym móc to zrobić table.remove(map, 'foo')
i oto jak to zaimplementowałem:
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
Czy jest lepszy sposób, aby to zrobić?
Odpowiedzi:
Nie, ustawienie wartości klucza na
nil
jest akceptowanym sposobem usuwania elementu z części tabeli zawierającej hashmap. To, co robisz, jest standardowe. Jednaktable.remove()
odradzałbym przesłonięcie - w przypadku tablicy tablicy, domyślna funkcja table.remove () obejmuje przenumerowanie indeksów, czego nie zrobiłby twój przesłonięcie. Jeśli chcesz dodać swoją funkcję dotable
zestawu funkcji, prawdopodobnie nazwałbym ją coś podobnegotable.removekey()
lub podobnego .źródło
table.removekey()
to też mój najlepszy wybór).table.insert
itable.remove
do lokalnej przestrzeni nazw, jeśli często ich używam, często jako coś w rodzajutinsert()
itremove()
.