将嵌套映射分解为键值对

时间:2016-01-28 15:00:00

标签: clojure

我想将Clojure中的嵌套映射分解为一系列键值对。例如,让我们有这张地图:

{:a :b
 :c {:d {:e :f
         :g :h}
     :i :j}}

此分解的地图应如下所示:

[[:a :b]
 [:c {:d {:e :f
          :g :h}
      :i :j}]
 [:d {:e :f
      :g :h}]
 [:e :f]
 [:g :h]
 [:i :j]]

输出顺序无关紧要。

我正在考虑使用递归函数tree-seqclojure.walk来解决此问题。我怀疑我可能会遗漏Clojure标准库中的某些内容。什么是解决这个问题的最佳解决方案?

1 个答案:

答案 0 :(得分:6)

这是一个使用tree-seq的解决方案:

(defn decompose [m]
  (mapcat (partial tree-seq (comp map? val) val) m))

这会产生一系列MapEntry s。