如何在clojure中将映射值转换为向量

如何在clojure中将映射值转换为向量,clojure,Clojure,如何将贴图的值转换为向量?例如: {:foo 1:bar{:foo 1:bar 2}}to{:foo 1:bar[{:foo 1:bar 2}] 尝试 (for [k (vector (keys m)) :let [m (assoc m :k (vector (:k m)) )] :when (isa? (class (:k m)) clojure.lang.PersistentArrayMap) ] (:k m)) m) 但是地图显示时没有任何转换。非常感谢您的帮助。这个怎么样: (int

如何将贴图的值转换为向量?例如:
{:foo 1:bar{:foo 1:bar 2}}
to
{:foo 1:bar[{:foo 1:bar 2}]

尝试

(for [k (vector (keys m)) :let [m (assoc m :k (vector (:k m)) )] :when (isa? (class (:k m)) clojure.lang.PersistentArrayMap) ] (:k m)) m)
但是地图显示时没有任何转换。非常感谢您的帮助。

这个怎么样:

(into {} (for [[k v] m] [k (if (map? v) [v] v)]))
这个怎么样:

(into {} (for [[k v] m] [k (if (map? v) [v] v)]))
您可以尝试使用来支持嵌套贴图

 (use 'clojure.walk)
 (postwalk (fn [x]
             (if (map? x) (vector x) x))
          {:foo 1 :bar {:foo 1 :bar 2}})
您可以尝试使用来支持嵌套贴图

 (use 'clojure.walk)
 (postwalk (fn [x]
             (if (map? x) (vector x) x))
          {:foo 1 :bar {:foo 1 :bar 2}})

zero323的解决方案可能比我的更有效,但由于知道多个解决方案不会有什么坏处,除了目前发布的解决方案之外,这里还有一个:

(zipmap (keys m) 
        (map #(if (map? %) (vector %) %) 
              (vals m)))

zero323的解决方案可能比我的更有效,但由于知道多个解决方案不会有什么坏处,除了目前发布的解决方案之外,这里还有一个:

(zipmap (keys m) 
        (map #(if (map? %) (vector %) %) 
              (vals m)))

我过去用过这种方法+爸爸!我过去用过这种方法+爸爸!