You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust编译期已知长度时,如何高效获取指定数量输入?

Rust中固定长度数组的现成生成方案需求

我在处理Project Euler第54题的扑克牌手牌解析任务,需要将每行输入解析为两组各5张牌的手牌。目前尝试了两种实现方案,但都存在明显缺陷:

方案1:基于Vec的实现

let mut buffer_1 = Vec::with_capacity(5);
for i in 0..5 {
    buffer_1.push(i)
}
assert_eq!(buffer_1.len(), 5);

缺陷:编译期已明确知道数组长度,却仍使用堆内存,造成不必要的开销。

方案2:基于Option数组的实现

let mut buffer_2 = [None; 5];
for i in 0..5 {
    buffer_2[i as usize] = Some(i)
}

缺陷:最终所有元素都是确定的Some类型,但必须先以None初始化再覆盖,逻辑冗余且不够直观。

我希望能使用现成的工具函数,直接将闭包的执行结果收集到固定长度数组中,理想用法如下:

fn array_from_closure<T>(length: usize, closure: fn(usize) -> T) -> Option<[T; length]> {
    // 已有现成实现
}

#[test]
fn array_from_closure_test() {
    let a: [i32; 5] = array_from_closure(5, |i| i).unwrap();
}

注:上述示例中调整了闭包参数,使其能接收索引,更符合实际生成元素的逻辑。

补充说明:我不需要从零实现该功能——自行实现需要大量unsafe代码,对小型项目而言成本过高,希望能直接利用标准库或成熟第三方库中的现成功能。

内容的提问来源于stack exchange,提问作者Pioneer_11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:00:14