Dictionary 映射到树中的向量

Dictionary 映射到树中的向量,dictionary,vector,clojure,Dictionary,Vector,Clojure,我有一个具有以下结构的集合[{:A0}{:B1}{:C1}{:D2}{:E3}{:F2}]。基本上,它是一棵树,其中向量的一个元素是一个节点。这个数字表示的是父子关系。因此,元素{:a0}是主父元素,没有父元素,而{:b1},{:c1}是{:a0}的子元素。而且,{:d2}是{:c1}的子代 我想要的是构造一个列表或向量,在这一点上没有关系,它具有以下结构: [{:a{:b nil:c{:d{:e nil}:f nil}}] 如何做到这一点?这应该是可行的: (fn [xs] (loop [

我有一个具有以下结构的集合[{:A0}{:B1}{:C1}{:D2}{:E3}{:F2}]。基本上,它是一棵树,其中向量的一个元素是一个节点。这个数字表示的是父子关系。因此,元素{:a0}是主父元素,没有父元素,而{:b1},{:c1}是{:a0}的子元素。而且,{:d2}是{:c1}的子代

我想要的是构造一个列表或向量,在这一点上没有关系,它具有以下结构: [{:a{:b nil:c{:d{:e nil}:f nil}}]

如何做到这一点?

这应该是可行的:

(fn [xs]
  (loop [[x & rs :as xs] xs
         m   {}
         lvl {}]
    (if (seq xs)
      (let [[k l] (first x)
            p (conj (lvl (dec l) []) k)]
        (recur
          rs
          (assoc-in m p nil)
          (assoc lvl l p)))
      m)))
正如@jas提到的,我们不能依赖于地图的键顺序,所以这里我们使用lvl地图来保持每层最后看到的元素的路径

这应该有效:

(fn [xs]
  (loop [[x & rs :as xs] xs
         m   {}
         lvl {}]
    (if (seq xs)
      (let [[k l] (first x)
            p (conj (lvl (dec l) []) k)]
        (recur
          rs
          (assoc-in m p nil)
          (assoc lvl l p)))
      m)))


正如@jas提到的,我们不能依赖于地图的键顺序,所以这里我们使用lvl地图来保持每层最后看到的元素的路径

到目前为止你试过什么?你怎么知道d是b还是c的孩子?同样的问题,我没有。然而,我想的是让函数检查每个元素,看看前一个元素的值是否小于1。如果是这样的话,它就是它的父母。如果没有,那么我将研究前面的两个步骤,以此类推。但我无法构建这样一个函数。@jas。在我感兴趣的结构中,d是c的子元素,因为它是离d最近的元素。这很有意义——我现在可以看到它正在按照深度优先的路径构建树。到目前为止,你尝试了什么?你如何知道d是b的子元素还是c的子元素?同样的问题,我没有。然而,我想的是让函数检查每个元素,看看前一个元素的值是否小于1。如果是这样的话,它就是它的父母。如果没有,那么我将研究前面的两个步骤,以此类推。但我无法构建这样一个函数。@jas。在我感兴趣的结构中,d是c的子元素,因为它是离d最近的元素。这很有意义——我现在可以看到它正在按照深度优先的路径构建树。谢谢。这正是我需要的。@HassanShahin如果答案正确,不要忘记接受答案。非常抱歉。我投了赞成票,但忘了接受@Olim Saidovi当条目是唯一的时,您的解决方案对我来说很好。如果他们不这样做,它就会失败。MNUIOTIONE 4 } {MeNuIube 4 }{MeNuIube 4 }{标题3 }{{img 3 }{p链接}{{链接}}{} } } }{ } } {div}}}{p }{{标题}}{链接}}{页脚}}{a }{{}}{a }}{a }}结果只包含一个MunuItA目,一个A.考虑这个向量[{html 0 }{{正文1 }{{ 2 }}{菜单3 }{MunuItIt}}{我想知道是否可以修改它以考虑到这种情况。您认为结果数据结构如何?谢谢。这正是我需要的。@HassanShahin如果答案正确,不要忘记接受答案。非常抱歉。我投了赞成票,但忘了接受@Olim Saidovi当条目是唯一的时,您的解决方案对我来说很好。如果他们不这样做,它就会失败。MNUIOTIONE 4 } {MeNuIube 4 }{MeNuIube 4 }{标题3 }{{img 3 }{p链接}{{链接}}{} } } }{ } } {div}}}{p }{{标题}}{链接}}{页脚}}{a }{{}}{a }}{a }}结果只包含一个MunuItA目,一个A.考虑这个向量[{html 0 }{{正文1 }{{ 2 }}{菜单3 }{MunuItIt}}{我想知道是否可以考虑到这种情况对其进行修改。您认为结果数据结构如何?