【发布时间】:2015-03-26 00:00:06
【问题描述】:
我有一个地图矢量,我想以嵌套方式对其进行转换。
数据结构如下:
(def data
[{:id 1 :name "a" :parent 0}
{:id 2 :name "b" :parent 0}
{:id 3 :name "c" :parent 0}
{:id 4 :name "a_1" :parent 1}
{:id 5 :name "a_2" :parent 1}
{:id 6 :name "b_1" :parent 2}
{:id 7 :name "a_1_1" :parent 4}])
每个地图都有一个:id,一些其他的键和值对这个讨论不重要,还有:parent键,表示元素是否属于另一个元素。如果:parent 为0,则为顶级元素。
我想嵌套这个扁平化列表,以便每个属于父元素的元素都存储在父映射中的键 :nodes 下,如下所示:
(def nested
[{:id 1 :name "a" :parent 0 :nodes
[{:id 4 :name "a_1" :parent 1 :nodes []}
{:id 5 :name "a_2" :parent 1 :nodes
[{:id 7 :name "a_1_1" :parent 4 :nodes []}]}]}
{:id 2 :name "b" :parent 0 :nodes
[{:id 6 :name "b_1" :parent 2}]}
{:id 3 :name "c" :parent 0 :nodes []}])
总而言之 - 我有一个扁平的树状结构,我希望再次变成一棵树。我尝试使用拉链来实现这一点,但未能处理任意嵌套级别。
【问题讨论】:
标签: recursion clojure tree nested zipper