Как удалить запись таблицы Lua по ее ключу?
Вопрос
У меня есть таблица Lua, которую я использую в качестве хэш-карты, т.е. со строковыми ключами:
local map = { foo = 1, bar = 2 }
Я хотел бы «вытолкнуть» элемент этой таблицы, идентифицированный его ключом.Eсть table.remove()
метод, но для него требуется только индекс удаляемого элемента (т. е. число), а не общий ключ.Я хотел бы иметь возможность сделать table.remove(map, 'foo')
и вот как я это реализовал:
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
Есть ли лучший способ сделать это?
Решение
Нет, установка значения ключа nil
— общепринятый способ удаления элемента из части хэш-карты таблицы.То, что вы делаете, стандартно.Однако я бы рекомендовал не переопределять table.remove()
- для части таблицы, являющейся массивом, функциональность table.remove() по умолчанию включает в себя перенумерацию индексов, чего не будет делать ваше переопределение.Если вы хотите добавить свою функцию в table
набор функций, то я бы, наверное, назвал его примерно так table.removekey()
или что-то в этом роде.