0

假设我有一个数据类型,其中只有一个字段包含已排序的映射。

(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 并自己实现所需的数据结构,但我希望这不是必需的。

4

1 回答 1

2

Clojure 的 update-in 函数适用于各种关联集合,包括排序的映射和 defrecords:

(更新邻接列表 [:data] dissoc 2)

于 2013-04-14T06:45:28.077 回答