rust 如何将一个向量转换为一个每x个元素组成一个元组的向量?例如:Vec< u8>->Vec〈(u8,u8,u8)>[closed]

baubqpgj  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(223)

2天前关闭。
截至2天前,社区正在审查是否重新讨论此问题。
Improve this question
我试图将一个Vec转换为一个Vec〈(u8,u8,u8)〉,它将相邻元素分组,我想知道是否有一个快速的方法来完成这个操作,因为对于一个大图像的迭代可能会相当慢。 into a Vec<(u8, u8, u8)> grouping adjacent elements and want to know if there is a quick way of doing this as iteration for a large image could be quite slow.
我目前的最佳解决方案是:

let dimensions = (img.dimensions().0 as usize, img.dimensions().1 as usize);
let size = dimensions.0 * dimensions.1;
let raw_data: Vec<u8> = img.into_raw();
let mut data: Vec<(u8, u8, u8)> = Vec::with_capacity(size);

for i in 0..size {
    data.push((raw_data[i*3], raw_data[i*3+1], raw_data[i*3+2]));
}
jtw3ybtb

jtw3ybtb1#

Itertools有一个tuples()适配器,它通过元组对连续项进行分组。
另一种可能性是,标准库有slice::chunksslice::chunks_exact,这需要一个切片输入(或者一些引用切片的东西,比如vec),并且你失去了类型安全方面(因为它们返回的切片可能比chunks指定的要小),但是它们不需要依赖。

相关问题