这可能很简单,但我就是无法克服它。 我有一个嵌套地图的数据结构,就像这样:
(def m {:1 {:1 2 :2 5 :3 10} :2 {:1 2 :2 50 :3 25} :3 {:1 42 :2 23 :3 4}})
我需要设置每个
m[i][i]=0
。这在非函数式语言中很简单,但我无法在Clojure上使其工作。考虑到我确实有一个包含每个可能值的向量(称之为v
),应该如何惯用地完成此操作?使用
(map #(def m (assoc-in m [% %] 0)) v)
将起作用,但在 map
函数内使用 def
并不正确。
将 m 改造成原子版本并使用 swap!
似乎更好。但它也很慢。(def am (atom m))
(map #(swap! am assoc-in[% %] 0) v)
什么是最好/正确的方法来实现这个?
更新
这里有一些很好的答案。我在这里发布了一个后续问题Clojure: iterate over map of sets,它与这个问题有一定的关联。