我從給我的形式結構的載體的數據庫中提取數據集的列表:轉化與父母標識結構的列表爲樹木
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