是否有一个转换Vec的好方法 到阵列? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有一个转换Vec的好方法 到阵列? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

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

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

答案

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

是的,这是你应该做的。

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

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

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
}

如果你的类型没有实现Copy,你不能使用copy_from_slice,所以你必须使用clone_from_slice代替。

以上是关于是否有一个转换Vec的好方法 到阵列? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

提供Kotlin阵列的补偿 .take(n:Int)。这是分页的好方法吗?

以字符串形式访问 Vec<&[u8]> 的正确方法[重复]

php中的二维多维数组到一维数组[重复]

使用刀片在阵列上放置一个 foreach [重复]

在数学库之间无缝转换

C# Epoch 时间到日期和时区转换