Sebbene i vettori siano i più adatti per la programmazione procedurale, vorrei utilizzare una funzione map
. Il seguente frammento di lavoro funziona:Utilizzo della mappa con Vettori
fn map<A, B>(u: &Vec<A>, f: &Fn(&A) -> B) -> Vec<B> {
let mut res: Vec<B> = Vec::with_capacity(u.len());
for x in u.iter() {
res.push(f(x));
}
res
}
fn f(x: &i32) -> i32 {
*x + 1
}
fn main() {
let u = vec![1, 2, 3];
let v = map(&u, &f);
println!("{} {} {}", v[0], v[1], v[2]);
}
Perché non esiste tale funzione nella libreria standard? (e anche in std::collections::LinkedList
). C'è un altro modo per affrontarlo?
Se non hai bisogno di cambiare il tipo magico di map_in_place, puoi semplicemente usare l'iteratore mutabile. 'per elt in & mut v {* elt = * elt + 1; } ' – bluss
Si noti che richiede anche che i tipi di input e output siano della stessa dimensione, il che non è sempre il caso. – Levans
Si noti che 'map_in_place' è stato deprecato dal 1.3. Suppongo che usiamo '.into_iter(). Map (...) .collect()' ora? – kennytm