Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure中嵌套向量的嵌套映射_Clojure - Fatal编程技术网

clojure中嵌套向量的嵌套映射

clojure中嵌套向量的嵌套映射,clojure,Clojure,我想知道在clojure中将嵌套映射转换为嵌套向量的最惯用方法是什么 例如: {:left {:left {:left 1, :right 5, :middle 1, :score 10}, :right {:left 7, :right 8, :middle 7, :score 0}, :middle 5, :score 10}, :right 9, :middle 8, :score 10} 致: 非常感谢您可以使用clojure.walk/postwalk按后序(即从叶子开始)遍历clo

我想知道在clojure中将嵌套映射转换为嵌套向量的最惯用方法是什么

例如:

{:left {:left {:left 1, :right 5, :middle 1, :score 10}, :right {:left 7, :right 8, :middle 7, :score 0}, :middle 5, :score 10}, :right 9, :middle 8, :score 10}
致:


非常感谢

您可以使用
clojure.walk/postwalk
按后序(即从叶子开始)遍历clojure数据结构,并用向量
[:左:右:中:分数]
值:

(require '[clojure.walk :refer [postwalk]])

(def nested-map 
  {:left {:left {:left 1, :right 5, :middle 1, :score 10}, 
          :right {:left 7, :right 8, :middle 7, :score 0}, 
          :middle 5, 
          :score 10}, 
   :right 9, 
   :middle 8, 
   :score 10})

(postwalk
  (fn [v]
    (if (map? v)
      ((juxt :left :right :middle :score) v)
      v))
  nested-map)
;; => [[[1 5 1 10] [7 8 7 0] 5 10] 9 8 10]
我的射击:

(clojure.walk/postwalk #(if (map? %) (into [] (vals %)) %) nested-map)
=> [[5 10 [7 0 8 7] [1 10 5 1]] 8 9 10]

当与哈希映射一起使用时,它不会保持顺序;但是,它将保留数组映射的顺序。

我很好奇这是什么用例。我用地图做了一个优先搜索树的实现,我想用vijual库(打印漂亮的ascii树表示)来可视化这个嵌套的地图树结构,但是vijual只接受嵌套向量。
(clojure.walk/postwalk #(if (map? %) (into [] (vals %)) %) nested-map)
=> [[5 10 [7 0 8 7] [1 10 5 1]] 8 9 10]