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
相关产品推荐
相关产品推荐

