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

Rust中如何用变量初始化数值数组?(Java开发者求助)

在Rust中动态初始化填充0的二维数组

Java里可以很方便地用运行时参数初始化填充0的二维int数组:

public int do_something(int width, int height){
     int[][] nums = new int[height][width];
     return 1;
}

但在Rust里直接用固定数组语法会报错:

fn do_something(n: usize, m: usize) -> i32 {
    let memo: [[i32; m]; n] = [[0; m]; n];
    1
}

原因是Rust的固定大小数组[T; N]要求长度N必须是编译期常量,运行时传入的n和m属于动态值,没法用来初始化这类数组。

你用嵌套循环实现的方案是可行的,但有更简洁的写法:

1. 用vec!宏快速生成Vec<Vec<i32>>

这是最接近Java写法的简洁实现:

fn do_something(n: usize, m: usize) -> i32 {
    let nums = vec![vec![0; m]; n];
    println!("{:?}", nums);
    1
}

vec![0; m]会生成一个长度为m、所有元素都是0的Vec<i32>,外层的vec![...; n]会复制这个内层向量n次,最终得到和嵌套循环完全一样的Vec<Vec<i32>>结构。

2. 用单Vec模拟连续内存的二维数组

如果你的场景对内存连续性有要求(比如需要更好的缓存性能),可以用单个一维Vec来模拟二维数组:

fn do_something(n: usize, m: usize) -> i32 {
    let nums = vec![0; n * m];
    // 访问第i行第j列的元素:nums[i * m + j]
    println!("{:?}", nums);
    1
}

这种方式的内存是连续分配的,比Vec<Vec>减少了外层向量的额外开销,只是需要手动计算索引来模拟二维访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:54:23