2015-09-30 14 views
6

Ngôn ngữ Rust có cách áp dụng hàm cho mỗi phần tử trong mảng/vectơ không. Tôi biết trong python có chức năng map() thực hiện tác vụ này. Trong R có các hàm lapply(), tapply()apply() cũng thực hiện việc này. Tôi đã tự hỏi nếu có một cách được thiết lập để vector hóa một chức năng trong Rust?Rust có cách nào để áp dụng một hàm/phương thức cho từng phần tử trong một mảng hoặc véc-tơ không?

+1

Ở đây bạn truy cập: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map Bạn có thể sử dụng nó như: 'vec! [1, 2, 3] .into_iter() .map (| x | x * 2) .collect :: >() ' – Adrian

Trả lời

12

Có một vài sự tinh tế ở đây:

Chúng tôi có bản đồ, hoạt động trên Iterators. Vì vậy, bạn có thể:

some_vec.iter().map(|x| { }) 

Tuy nhiên, Iterator lười, vì vậy điều này sẽ không làm gì cả. Bạn có thể tack một .collect() vào cuối để tạo một vector mới với các phần tử mới, nếu đó là những gì bạn muốn.

Cách thông thường để làm điều gì đó mà không cần phân bổ là sử dụng một vòng lặp for:

for i in &vec { 

Nếu bạn thực sự muốn các phong cách chức năng, bạn có thể sử dụng phương pháp forall trong itertools thùng.

+0

Nói Steve, tôi chỉ tự hỏi liệu có sự khác biệt về hiệu suất giữa phương pháp tiếp cận vòng lặp/thu thập so với vòng lặp' for' hay không. Tôi biết trong python có một sự khác biệt hiệu suất quan trọng giữa các vòng lặp, danh sách hiểu và hàm 'map()'. Có bất kỳ hướng dẫn hiệu suất nào cho Rust về các vấn đề như thế này - chủ yếu là tính toán số không? – krishnab

+1

cho vòng lặp là đường cho trình lặp trong Rust: http://doc.rust-lang.org/stable/std/iter/index.html#rust%27s-for-loop vì vậy không nên là :) –

Các vấn đề liên quan