2017-07-06 26 views
5

Tôi đang triển khai FromIterator cho [MyStruct;4] trong đó MyStruct là một cấu trúc Sao chép nhỏ. Triển khai hiện tại của tôi làCách tốt nhất để điền một lát từ một trình lặp trong Rust là gì?

fn from_iter<I: IntoIterator<Item=MyStruct>>(iter: I) -> Self { 
    let mut retval = [Default::default();4]; 

    for (ret, src) in retval.iter_mut().zip(iter) { 
     *ret = src; 
    } 

    retval 
} 

Điều này chỉ hoạt động tốt, tuy nhiên tôi không chắc chắn rằng vòng lặp for có thành ngữ như thường lệ không. Có lẽ một phương pháp như Slice::fill(iter) có thể thực hiện điều này một cách rõ ràng hơn (và có lẽ hiệu quả hơn) không?

+0

Có thể bạn chỉ cần sử dụng đồng bằng, cũ [bản đồ] (https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map)? – hellow

Trả lời

1

Vòng lặp OK và chúng thường tối ưu hóa rất tốt.

Một giải pháp khác có thể là collect() vào số ArrayVec. Nó tránh phải điền vào mảng với giá trị mặc định trước tiên.

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