s.
м году я пробую Advent of Code в Rust как способ изучения языка. Я проанализировал вход (с 7-го дня) в следующую структуру:
struct Process {
name: String,
weight: u32,
children: Vec<String>,
parent: Option<String>
}
Они хранятся в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;
}
}
Я не могу иметь как изменчивую ссылку наHashMap
(self.processes
) и не изменяемая ссылка, или две изменяемые ссылки.
Итак, какой самый идиоматический способ сделать это в Rust? Я вижу два варианта:
Скопируйте отношения родитель / потомок в новую временную структуру данных за один проход, а затем обновите структуры Процесс во втором проходе, после того как неизменная ссылка выйдет из области видимости.Измените мою структуру данных, чтобы поместить «родителя» в свой собственный HashMap.Есть ли третий вариант?