Как удалить запись таблицы lua по ее ключу?

У меня есть таблица lua, которую я использую как hashmap, то есть со строковыми клавишами:

local map = { foo = 1, bar = 2 }

Я бы хотел "поп" элемент этой таблицы, идентифицированный его ключом. Существует метод table.remove(), но он принимает только индекс элемента для удаления (т.е. Число), а не общий ключ. Я хотел бы иметь возможность сделать table.remove(map, 'foo'), и вот как я его реализовал:

function table.removekey(table, key)
    local element = table[key]
    table[key] = nil
    return element
end

Есть ли лучший способ сделать это?

Ответ 1

Нет, установка значения ключа nil является принятым способом удаления элемента в части хэш-карты таблицы. То, что вы делаете, является стандартным. Однако я бы рекомендовал не переопределять table.remove() - для части массива таблицы, функция table.remove() по умолчанию включает перенумерацию индексов, которые ваше переопределение не будет делать. Если вы хотите добавить свою функцию в набор функций table, то я бы назвал ее как-то вроде table.removekey() или некоторых таких.