假设我的数据类型只包含一个包含有序映射的字段。
(defrecord AdjacencyList [data])
(def adjacency-list (AdjacencyList. (sorted-map 1 {2 100}, 2 {3 -100})))
现在,如果我想操纵字段并保持其类型,我必须做这样的事情:
(AdjacencyList. (dissoc (:data adjacency-list) 2))
有没有办法通过调用记录来引用该字段?
(dissoc adjacency-list 2)
如果我需要一个常规的哈希映射,我可以使用记录的地图实现,但我需要一个有序的映射,我使用集合和向量得到其他类似的数据类型。
解决方案是使用deftype而不是自己实现所需的数据结构,但我希望没有必要。
答案 0 :(得分:2)
Clojure的update-in函数适用于各种关联集合,包括有序映射和defrecords:
(update-in adjacency-list [:data] dissoc 2)