У меня есть таблица lua, которую я использую как хэш-карту, то есть со строковыми ключами:
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
Есть ли лучший способ сделать это?
Ответы:
Нет, установка значения ключа
nil
- это приемлемый способ удаления элемента в части таблицы хэш-карты. То, что вы делаете, стандартно. Однако я бы рекомендовал не переопределятьtable.remove()
- для части таблицы в виде массива функция table.remove () по умолчанию включает перенумерацию индексов, чего ваше переопределение не будет. Если вы действительно хотите добавить свою функцию вtable
набор функций, я бы, вероятно, назвал ее как-то такtable.removekey()
или что-то в этом роде .источник
table.removekey()
тоже мой лучший выбор).table.insert
иtable.remove
в локальное пространство имен, если я использую их часто, часто как что-то вродеtinsert()
иtremove()
.