Существует различие между абстрактными понятиями и конкретными структурами данных.
Словарь - это абстрактное понятие - отображение ключей на значения. Это может быть реализовано несколькими различными подходами:
- в виде списка: пары ключ-значение (списки Lisp), плоский список чередующихся ключей и значений (списки Lisp), как пара из двух списков ключей и значений
- как таблица, будь то хеш-таблица Лиспа / HashMap Java или какая-то другая таблица
- как дерево (TreeMap Java)
- и т.д.
Словарь C # - это структура данных, которая поддерживает (амортизируется) постоянное время поиска, как хеш-таблица CL. В этом отношении он отличается от alist тем, что имеет линейное время поиска. Кроме того, списки не зависят от хеш-кода элемента для его сохранения / извлечения. API списков также отличается от словаря. Есть assoc
и rassoc
для поиска элемента с левой и правой стороны соответственно. (Таким образом, в отличие от обычного словаря, в alist может быть несколько отображений одного и того же ключа на разные значения). Также есть acons
и pairlis
для построения alist
.
РЕДАКТИРОВАТЬ И, наконец, нет стандартной функции для удаления элемента из списка.
Вы можете удалить элемент с помощью (remove key alist :key #'car)
. Но обратите внимание, что эта операция оставляет исходный список без изменений и возвращает в результате измененный список.