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_Nested Map - Fatal编程技术网

Clojure 使用深度优先搜索顺序将嵌套地图展平到列表中

Clojure 使用深度优先搜索顺序将嵌套地图展平到列表中,clojure,nested-map,Clojure,Nested Map,在clojure中,如何像这样打开嵌套贴图: {"1" {"1.1" {"1.1.1" {} "1.1.2" {}} "1.2" {}} "2" {"2.1" {} "2.2" {} "2.3" {}}} 为此: ("1" "1.1" "1.1.1" "1.1.2" "1.2" "2" "2.1" "2.2" "2.3") 下面是一个递归解决方案: (defn flatten-map [m] (flatten (fo

在clojure中,如何像这样打开嵌套贴图:

{"1" {"1.1" {"1.1.1" {}
             "1.1.2" {}}
      "1.2" {}}
 "2" {"2.1" {}
      "2.2" {}
      "2.3" {}}}
为此:

("1" "1.1" "1.1.1" "1.1.2" "1.2" "2" "2.1" "2.2" "2.3")

下面是一个递归解决方案:

(defn flatten-map [m]
  (flatten
    (for [[k v] m]
      (cons k (flatten-map v)))))

下面是一个递归解决方案:

(defn flatten-map [m]
  (flatten
    (for [[k v] m]
      (cons k (flatten-map v)))))

下面是一个使用循环和递归的简单迭代解决方案:

defn展平贴图[m] 循环[in m out[]] 如果让[[[k v]&ts]顺序进入] 复发性鼻窦炎 拼凑出k 出来 还有一个漂亮的

defn展平贴图[m] ->>[零米] 树序列?第二 下降1 先绘制地图
下面是一个使用循环和递归的简单迭代解决方案:

defn展平贴图[m] 循环[in m out[]] 如果让[[[k v]&ts]顺序进入] 复发性鼻窦炎 拼凑出k 出来 还有一个漂亮的

defn展平贴图[m] ->>[零米] 树序列?第二 下降1 先绘制地图
在这里使用flatte是一个非常糟糕的主意。你应该使用一些非递归的方法,例如apply concat。你能解释一下原因吗?不反对你的承诺本身并不坏。这种特殊情况是否会导致大量开销或损害性能?如果是这样,我可以看到循环/重复将如何帮助。展平也可能会产生不想要的结果。例如,尝试用函数展平{1{[11]{}[12]{}}}。与预期的[1[1 1][1 2]]相反,您的函数将生成一个展平的[1 1 2]。我想说的是,只有当您希望展平某些深度未知的嵌套数据结构时,才应该使用展平。但是有更好的方法来执行一级展平。在这里使用展平是一个非常糟糕的主意。你应该使用一些非递归的方法,例如apply concat。你能解释一下原因吗?不反对你的承诺本身并不坏。这种特殊情况是否会导致大量开销或损害性能?如果是这样,我可以看到循环/重复将如何帮助。展平也可能会产生不想要的结果。例如,尝试用函数展平{1{[11]{}[12]{}}}。与预期的[1[1 1][1 2]]相反,您的函数将生成一个展平的[1 1 2]。我想说的是,只有当您希望展平某些深度未知的嵌套数据结构时,才应该使用展平。但是有更好的方法来执行一级平坦化。