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.

Есть ли третий вариант?

Ответы на вопрос(1)

Ваш ответ на вопрос