arrays - 如何在 Rust 中将切片作为数组获取?

标签 arrays rust

我有一个大小未知的数组,我想获取该数组的一部分并将其转换为静态大小的数组:

fn pop(barry: &[u8]) -> [u8; 3] {
    barry[0..3] // expected array `[u8; 3]`, found slice `[u8]`
}

我该怎么做?

最佳答案

您可以使用 TryInto 轻松做到这一点特征(在 Rust 1.34 中稳定):

// Before Rust 2021, you need to import the trait:
// use std::convert::TryInto;

fn pop(barry: &[u8]) -> [u8; 3] {
    barry.try_into().expect("slice with incorrect length")
}

但更好的是:无需克隆/复制您的元素!实际上可以获得 &[u8; 3] 来自&[u8]:

fn pop(barry: &[u8]) -> &[u8; 3] {
    barry.try_into().expect("slice with incorrect length")
}

如其他答案中所述,如果 barry 的长度不是 3,您可能不想 panic ,而是优雅地处理此错误。

这要归功于相关特征的这些暗示 TryFrom (在 Rust 1.47 之前,这些仅存在于长度不超过 32 的数组中):

impl<'_, T, const N: usize> TryFrom<&'_ [T]> for [T; N]
where
    T: Copy, 

impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N]

impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N]

关于arrays - 如何在 Rust 中将切片作为数组获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939376/

相关文章:

rust - 为什么在实现 HMAC-SHA256 时得到不正确的值?

c - C 中的通用列表包含垃圾值

arrays - 如何在 swift 数组中使用 minElement

arrays - 在 shell 脚本中将多行输出解析为数组

http - 为什么原始 HTTP 请求非常慢?

vector - 获取存储在 n 维向量中的元素数

Rust:如何过滤掉 "None"排放?

iterator - 如何迭代结构集合作为特征对象引用的迭代器?

java - 将参数输入到对象数组中?

java - 如何随机组合 2 个数组的元素,同时确保在所有元素至少使用一次之前不会重复使用某个元素?