有没有一种很好的方法将Vec <T>转换为数组?

jgr*_*ray 23 rust

有没有一种很好的方法将Vec<T>大小转换S为类型数组[T; S]?具体来说,我正在使用一个返回128位散列的函数作为a Vec<u8>,它总是长度为16,我想将散列作为a处理[u8, 16].

是否有类似于as_slice方法的东西,它给了我想要的东西,或者我应该编写自己的函数来分配固定大小的数组,迭代复制每个元素的向量,并返回数组?

She*_*ter 17

[S]我应该编写自己的函数来分配一个固定大小的数组,迭代复制每个元素的向量,然后返回数组?

是的,这是你应该做的.

在向量上有一个方法来提供它是没有意义的,因为你目前无法对数组的长度进行参数化.这意味着每个大小都需要是一个专门的实现(尽管宏将有助于样板).此外,必须完全初始化数组,因此当您将具有太多或太少元素的向量转换为数组时,您很快就会担心该怎么做.

为了完整起见,这里有一个小例子:

fn from_slice(bytes: &[u8]) -> [u8; 32] {
    let mut array = [0; 32];
    let bytes = &bytes[..array.len()]; // panics if not enough data
    array.copy_from_slice(bytes); 
    array
}
Run Code Online (Sandbox Code Playgroud)

如果您的类型没有实现Copy,则无法使用copy_from_slice,因此您必须使用clone_from_slice.