如何在Rust中构造大型常量数组而无需手动写入值来构造它

zdwk9cvp  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(139)

TLDR:构造大型const数组而无需手动逐个写入所有值的最佳方法是什么?

  • 主观 * 问题如下:

我希望我的程序有一个constarray,它将保存ASCII字节的范围([u8; 94]),但我不想使用Range<u8>
我不使用Vec的原因是,我已经知道了值的确切范围,我可以静态地完成这一切,我只是似乎找不到不手动写入每个值就能构造这样一个数组的方法。
在发布这个问题之前,我所做的是使用constRange,因为containsO(1)
总之关于原始问题,我想要这个:

const VALID_BLOCK_BYTES: [u8; 94] = [32..126; 94];

我如何获得值从32到126的常量变量数组,而不需要自己手动编写它?

5vf7fwbs

5vf7fwbs1#

我认为,现在实现这一目标的最佳方法是使用手动循环:

const VALID_BLOCK_BYTES: [u8; 94] = {
    let mut output = [0; 94];

    let mut i = 0;
    while i < 94 {
        output[i as usize] = i + 32;
        i += 1;
    }

    output
};

无法使用迭代器,因为常量上下文中的特性不稳定。
当然,如果您需要经常这样做,您可以将其分解为const fn

相关问题