Arrays 创建具有相同长度的数组
我正在写一些用Lodepeng rust写图像的东西,我想用像素而不是Arrays 创建具有相同长度的数组,arrays,rust,compile-time,Arrays,Rust,Compile Time,我正在写一些用Lodepeng rust写图像的东西,我想用像素而不是u8s。我已经创建了一个结构 struct Pixel {r: u8, g: u8, b: u8} 我用数组的元素构建一个u8s的数组。因为我现在是手工制作阵法,所以我现在的处境很奇怪,需要手工制作另一个阵法。有没有一种方法可以在编译时创建一个长度是像素数组长度三倍的数组?差不多 let data: [u8; other_array.len()*3]; 这不起作用,因为.len()不是编译时常量。在这种情况下,运行时成本对
u8
s。我已经创建了一个结构
struct Pixel {r: u8, g: u8, b: u8}
我用数组的元素构建一个u8
s的数组。因为我现在是手工制作阵法,所以我现在的处境很奇怪,需要手工制作另一个阵法。有没有一种方法可以在编译时创建一个长度是像素数组长度三倍的数组?差不多
let data: [u8; other_array.len()*3];
这不起作用,因为.len()
不是编译时常量。在这种情况下,运行时成本对我来说并不重要,但如果我能将大小关联起来,它会感觉更干净(而且我将来可能需要性能)
编辑:
我使用的解决方案基于Levans的答案对于不手动初始化数组的用户,只需按照Levans操作即可。我手动初始化第一个数组,但将类型设置为使用pixel\u count
中指定的长度,以便在编译时捕获错误的pixel\u count
。我使用该常数创建第二个数组,然后断言长度具有正确的比率。我的最小示例如下所示:
struct Pixel {r: u8, g: u8, b: u8}
const pixel_count: usize = 4;
fn main() {
let pixel_data = [Pixel; pixel_count] = [
Pixel {r: 255, g: 0, b: 0},
Pixel {r: 0, g: 255, b: 0},
Pixel {r: 0, g: 0, b: 255},
Pixel {r: 0, g: 99, b: 99},
];
let mut data = [0u8; pixel_count*3];
assert_eq!(pixel_data.len()*3, data.len());
}
创建与大小相关的数组的最简单方法是将初始大小存储为
const
项:它们是编译时常量:
const pixel_count: uint = 42;
struct Pixel { r: u8, g: u8, b: u8 }
fn main() {
let pixels = [Pixel { r: 0, g: 0, b: 0 }, ..pixel_count];
let raw_data = [0u8, ..pixel_count * 3];
assert!(pixels.len() * 3 == raw_data.len());
}
您可能希望将
像素数
转换为像素数
,以便它们匹配。无论如何,使用断言代码>使我使用的方法完美,谢谢!这在0.12.0中不再有效。你知道这是否是故意的吗?@DrYap确实,它已经改变了,关键字现在是const
。谢谢