我从给我的形式结构的载体的数据库中提取数据集的列表:转化与父母标识结构的列表为树木
struct Foo {
id: i32,
parent: Option<i32>,
data: String,
}
我想序列化和输出到JSON这个数据的嵌套版本的向量:我有一些问题,我的包裹解决这个因执行头部递归性
struct Bar {
id: i32,
data: String,
children: Option<Vec<Bar>>,
}
。我可以使用迭代器来解决这个问题,但是当我想通过同一个向量重新迭代时,会碰壁。
例如,在Vec<Foo>
的方法,它试图将只窝儿ID添加到一个HashMap:
fn build_tree(&self) -> HashMap<i32, Vec<i32>> {
let mut tree = HashMap::new();
for node in self.iter() {
if let Some(parent) = node.parent {
let leaf = tree.entry(parent).or_insert(Vec::new());
leaf.push(node.id);
}
}
tree
}
产生
{14: [15], 3: [14], 1: [2, 17], 2: [16, 18], 18: [19], 19: [20]}
但我需要这将是更深层次的东西:
{3: [14: [15]], 1: [2: [16, 18: [19: [20]]], 17]}
通过this post阅读有关车削recursiv Ë想法付诸迭代的代码表明,这样的实现是可能的,但我已经从困难这一问题采取的思路和这里应用它们。
有人能描述这种转变对Vec<Foo>
一个Vec<Bar>
的方法?我会对迭代或递归建议感到满意;当我自己尝试递归时,我在借用和引用时遇到了很多问题。
@trentcl:我很乐意与递归建议过,我只是有很多的问题与借入和引用,当我试图这条路线我自己。 – Geodesic