2015-04-10 16 views
11

Có cách nào tốt để chuyển đổi một số Vec<T> với kích thước S thành một loại kiểu [T; S]? Cụ thể, tôi đang sử dụng hàm trả về giá trị băm 128 bit là Vec<u8>, sẽ luôn có độ dài 16 và tôi muốn xử lý băm dưới dạng [u8, 16].Có cách nào tốt để chuyển đổi một Vec <T> thành một mảng không?

Có một cái gì đó được xây dựng tương tự như phương pháp as_slice mang lại cho tôi những gì tôi muốn hoặc tôi nên viết chức năng của riêng mình phân bổ mảng có kích thước cố định, lặp qua việc sao chép vectơ từng phần tử và trả về mảng?

Trả lời

9

[S] Tôi có thể viết hàm riêng của mình để phân bổ mảng có kích thước cố định, lặp qua việc sao chép vectơ từng phần tử và trả về mảng không?

Vâng, đây là những gì bạn nên làm.

Nó sẽ không thực sự có ý nghĩa để có một phương pháp trên một vector để cung cấp này, vì bạn hiện không thể tham số hóa trên chiều dài của một mảng. Điều đó có nghĩa là mỗi kích thước sẽ cần phải là một triển khai chuyên biệt (mặc dù các macro sẽ giúp bản mẫu). Ngoài ra, các mảng phải được khởi tạo hoàn toàn, vì vậy bạn nhanh chóng gặp phải những lo ngại về việc phải làm gì khi bạn chuyển đổi một vectơ có quá nhiều hoặc quá ít phần tử thành một mảng.

Để hoàn chỉnh, đây là một ví dụ nhỏ của nó như thế nào có thể nhìn:

fn from_slice(bytes: &[u8]) -> [u8; 32] { 
    let mut a = [0; 32]; 
    for i in 0..a.len() { 
     // Panics if not enough input 
     a[i] = bytes[i]; 
    } 
    a 
} 

Tốt nhất, bạn có thể sử dụng clone_from_slice, nhưng nó hiện không ổn định.

+5

Lưu ý: có vẻ như 'clone_from_slice' hiện đã ổn định. – ideasman42

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