Mặc dù các vectơ phù hợp nhất cho lập trình thủ tục, tôi muốn sử dụng chức năng map
trên chúng. Đoạn mã sau hoạt động:Sử dụng bản đồ với Vectors
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]);
}
Tại sao không có bất kỳ chức năng nào như vậy trong thư viện chuẩn? (và cũng trong std::collections::LinkedList
). Có cách nào khác để đối phó với nó?
Nếu bạn không cần thay đổi kiểu phép thuật của map_in_place, bạn chỉ có thể sử dụng trình lặp có thể thay đổi được. 'cho elt in & mut v {* elt = * elt + 1; } ' – bluss
Lưu ý rằng nó cũng yêu cầu các kiểu đầu vào và đầu ra có cùng kích thước, mà chắc chắn không phải luôn luôn như vậy. – Levans
Lưu ý rằng 'map_in_place' đã không còn được dùng kể từ 1.3. Tôi đoán chúng ta sử dụng '.into_iter(). Map (…) .collect()' bây giờ? – kennytm