Como posso modificar outros elementos de um HashMap ao usar o padrão de entrad
Eu gostaria de usar umHashMap
para armazenar em cache um cálculo caro, dependente de outras entradas no mapa. O padrão de entrada fornece apenas uma referência mutável para o valor correspondente, mas não para o restante doHashMap
. Eu realmente aprecio o feedback de uma maneira melhor de resolver este exemplo de brinquedo (incorreto):
use std::collections::HashMap;
use std::collections::hash_map::Entry::{Occupied, Vacant};
fn compute(cache: &mut HashMap<u32, u32>, input: u32) -> u32 {
match cache.entry(input) {
Vacant(entry) => if input > 2 {
// Trivial placeholder for an expensive computation.
*entry.insert(compute(&mut cache, input - 1) +
compute(&mut cache, input - 2))
} else {
0
},
Occupied(entry) => *entry.get(),
}
}
fn main() {
let mut cache = HashMap::<u32, u32>::new();
let foo = compute(&mut cache, 12);
println!("{}", foo);
}
O problema com o trecho acima é quecache.entry
emprestacache
imutável, mas eu gostaria de atualizarcache
também