如何在Rust中单行完成二维数组的定义与赋值
固定大小栈上二维数组(对应C# int[,] 语义)
直接用嵌套数组字面量初始化即可,语法和C#非常接近:
let a: [[i32;4];4] = [ [0, 10, 35, 30], [10, 0, 30, 15], [35, 30, 5, 30], [30, 15, 30, 0] ];
这种数组的大小在编译期确定,存储在栈上,性能更高,适合尺寸固定的场景。如果需要修改元素,添加mut关键字即可:let mut a = [[...]; ...];
堆上动态二维Vec(对应你示例中原有Vec<Vec<i32>>类型)
用嵌套的vec!宏直接初始化所有元素,不需要先创建全0数组再逐个赋值:
let a: Vec<Vec<i32>> = vec![ vec![0, 10, 35, 30], vec![10, 0, 30, 15], vec![35, 30, 5, 30], vec![30, 15, 30, 0] ];
如果要压缩为完全的单行写法,去掉换行即可:
let a = vec![vec![0,10,35,30],vec![10,0,30,15],vec![35,30,5,30],vec![30,15,30,0]];
注意事项
- Rust 不允许十进制数字字面量添加前导0,你原有代码中的
00、05需要改为0、5,否则会触发编译错误。 - 两种初始化方式都支持后续修改元素,只需在声明时添加
mut关键字即可,和你原有写法的修改逻辑完全一致。
内容的提问来源于stack exchange,提问作者Alexandra Danith Ansley
相关产品推荐
相关产品推荐

