Как удалить запись таблицы lua по ее ключу? - PullRequest
83 голосов
/ 18 ноября 2009

У меня есть таблица 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

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

1 Ответ

73 голосов
/ 18 ноября 2009

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

...