相关疑难解决方法(0)

如何同时遍历Rust HashMap并修改其某些值?

我今年将尝试在Rust中使用Code Advent,作为学习语言的一种方式。我已经将输入(从第7天开始)解析为以下结构:

struct Process {
    name: String,
    weight: u32,
    children: Vec<String>,
    parent: Option<String>
}
Run Code Online (Sandbox Code Playgroud)

这些存储在中HashMap<String, Process>。现在,我要根据在父级的“子级”向量中找到的内容,迭代地图中的值并更新父级值。

什么是行不通的

for p in self.processes.values() {
    for child_name in p.children {
        let mut child = self.processes.get_mut(child_name).expect("Child not found.");
        child.parent = p.name;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能同时具有对HashMapself.processes)和可变变量的引用,也不能具有两个可变引用。

那么,在Rust中最惯用的方法是什么?我可以看到两个选项:

  1. 在不可变引用超出范围后,一次将父/子关系复制到新的临时数据结构中,然后在第二次更新中更新Process结构。
  2. 更改我的数据结构以将“父”放入其自己的HashMap中。

还有第三种选择吗?

rust borrow-checker

4
推荐指数
1
解决办法
842
查看次数

标签 统计

borrow-checker ×1

rust ×1