Rust中手动初始化数组前n个元素后剩余元素用默认值填充的方法
Rust 数组部分初始化+剩余填充指定值的实现方案
你示例中提到的类似结构体扩展的let arr: [i32; 5] = [1, 2, ..3];语法目前尚未在Rust稳定版中支持,属于还在迭代的实验特性。你可以通过以下几种方式实现需求:
方法1:初始化后覆盖+填充(最简单的稳定版方案)
先创建全填充目标默认值的数组,再手动覆盖前n个元素:
// 先创建长度为5、所有元素都是3的数组 let mut arr = [3; 5]; // 手动覆盖前两个元素 arr[0] = 1; arr[1] = 2; // 最终结果:[1, 2, 3, 3, 3]
如果剩余元素需要用Default trait的默认值,也可以先初始化默认数组再填充剩余位置:
let mut arr = <[i32; 5]>::default(); arr[0] = 1; arr[1] = 2; // 把从索引2开始的所有元素填充为3 arr[2..].fill(3);
方法2:迭代器拼接(无需可变变量)
如果不想使用可变变量,可以用迭代器拼接后转换为数组:
let arr: [i32; 5] = [1, 2] .into_iter() .chain(std::iter::repeat(3).take(3)) .collect::<Vec<_>>() .try_into() .unwrap(); // 迭代器总长度固定为5,此处unwrap不会触发panic
方法3:使用nightly版本实验特性
如果你可以使用nightly版本的Rust,开启array_expressions特性后就可以使用类似你示例的语法:
// 必须在文件顶部添加特性声明 #![feature(array_expressions)] let arr: [i32; 5] = [1, 2, ..[3; 3]]; // 直接得到结果:[1, 2, 3, 3, 3]
内容的提问来源于stack exchange,提问作者Kasra
相关产品推荐
相关产品推荐

