如何将地图的值转换为矢量?例如:
{:foo 1 :bar {:foo 1 :bar 2}}
至{: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)
但地图显示没有任何转换。非常感谢任何帮助。
答案 0 :(得分:2)
这个怎么样:
(into {} (for [[k v] m] [k (if (map? v) [v] v)]))
答案 1 :(得分:2)
您可以尝试使用postwalk来支持嵌套地图。
(use 'clojure.walk)
(postwalk (fn [x]
(if (map? x) (vector x) x))
{:foo 1 :bar {:foo 1 :bar 2}})
答案 2 :(得分:2)
zero323的解决方案可能比我的解决方案效率更高,但由于知道多个解决方案并不会有什么坏处,除了目前发布的解决方案之外,还有另一个解决方案:
(zipmap (keys m)
(map #(if (map? %) (vector %) %)
(vals m)))