儘管矢量最適合用於程序編程,但我想對它們使用map
函數。以下片段的工作原理如下:使用帶有矢量圖的地圖
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]);
}
爲什麼標準庫中沒有這樣的函數? (也在std::collections::LinkedList
)。是否有另一種方式來處理它?
如果你不需要map_in_place的神奇的類型改變,你可以使用可變的迭代器。 'for elt in&mut v {* elt = * elt + 1; }' – bluss
請注意,它也需要輸入和輸出類型具有相同的大小,當然並非總是如此。 – Levans
注意'map_in_place'從1.3開始已被棄用。我想我們現在使用'.into_iter()。map(...).collect()'? – kennytm