尽管矢量最适合用于程序编程,但我想对它们使用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