Clojure - сопоставление или установка с фиксированным значением-> функция ключа?

У меня довольно много записей в моей программе, которые я в конечном итоге помещаю на карту, используя одну из их поля в качестве ключа. Например

(defrecord Foo. [id afield anotherfield])

И затем я бы добавил это на карту с идентификатором в качестве ключа. Все это прекрасно выполнимо, но немного утомительно, например, при добавлении нового экземпляра Foo на карту мне нужно сначала извлечь ключ. Я' m интересно, существует ли где-нибудь в clojure.core структура данных для этого?

По сути, я хотел бы построить набор Foo, присвоив набору значение функции сопоставления клавиш (например: id) во время создания набора, а затем использовать это, когда я хочу добавить / найти / удалить / ... значение.

Итак, вместо:

(assoc my-map (:id a-foo) a-foo))

я мог бы сделать, скажем:

(conj my-set a-foo)

И что более интересно, объединить и объединить с поддержкой.

5
задан Kurt Schelfthout 16 February 2011 в 11:56
поделиться