如何在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)))
我过去用过这种方法+爸爸!我过去用过这种方法+爸爸!