gpt4 book ai didi

arrays - 创建相同长度的数组

转载 作者:行者123 更新时间:2023-11-29 08:00:06 24 4
gpt4 key购买 nike

我正在写一些用 lodepng-rust 写图像的东西,我想使用像素而不是 u8s。我创建了一个结构

struct Pixel {r: u8, g: u8, b: u8}

并且正在用数组的元素构建一个 u8 数组。由于我现在正在手工制作阵列,所以我处于需要手工制作另一个阵列的奇怪情况。有没有一种方法可以在编译时创建一个长度为像素数组长度三倍的数组?有点像

let data: [u8; other_array.len()*3];

这不起作用,因为 .len() 不是编译时常量。在这种情况下,运行时成本对我来说并不重要,但如果我能获得相关的大小,它会感觉更干净(我将来可能需要性能)。

编辑:我使用的解决方案基于 Levans 的回答。 对于不手动初始化数组的人,只需遵循 Levans。我手动初始化我的第一个数组,但将类型设置为使用 pixel_count 中指定的长度,以便它'会在编译时捕捉到错误的 pixel_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());
}

关于arrays - 创建相同长度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com