Чтобы добавить элемент в словарь, я делаю
q) d[`x]:12345
Это изменяет существующий словарь, а стоимость операции близка к O(1)
или O(log N)
в зависимости от базовой реализации (хэш-таблица или дерево) (на самом деле я не знаю).
Однако, чтобы удалить ключ, я должен использовать:
q) d:(enlist `x) _ d
Это как минимум O(N)
, потому что он копирует полный словарь без удаления элементов в O(N)
, а затем присваивает его d
в O(1)
из-за указателя.
Это похоже на удаление операции дискриминации! Может быть, удаление на месте плохо документировано, но где-то существует?