我想将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-seq
或clojure.walk
来解决此问题。我怀疑我可能会遗漏Clojure标准库中的某些内容。什么是解决这个问题的最佳解决方案?
答案 0 :(得分:6)
这是一个使用tree-seq
的解决方案:
(defn decompose [m]
(mapcat (partial tree-seq (comp map? val) val) m))
这会产生一系列MapEntry
s。