arrays - 我的3D数组长度为2,但在运行时访问索引2紧急情况

标签 arrays rust

我有以下代码

fn main() {
    let mut array: [[[i32; 32]; 32]; 2] = Default::default();

    for x in 0..31 {
        for y in 0..31 {
            array[x][y][1] = 1;
        }
    }
}

当我运行它时,我得到了错误

thread 'main' panicked at 'index out of bounds: the len is 2 but the index is 2', src/main.rs:6:13

这是array[x][y][1] = 1;行。

如果数组的长度为2,则应该可以在索引1中放入内容,但是由于某种原因,它表示我正在尝试访问索引2。对此的解决方案是什么?

最佳答案

let array1: [i32; 2];

是2个i32的数组。简单。现在i32是2数组“内部”的类型。因此,当我们编写时:
let array2: [[i32; 32]; 2];

这是2个[i32; 32]元素的数组。因此,这是一个包含32个i32元素的2个数组的数组。当您这样做时:
let array: [[[i32; 32]; 32]; 2]

内部维度为32,而最大外部维度为2。

我想你的意思是:
let mut array: [[[i32; 2]; 32]; 32] = Default::default();

for x in 0..31 {
    for y in 0..31 {
        array[x][y][1] = 1;
    }
}

关于arrays - 我的3D数组长度为2,但在运行时访问索引2紧急情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60424021/

相关文章:

javascript - 如何根据属性筛选和排列对象数组

javascript - 将 for 循环变成静态数组?

javascript - 为什么 array.push 有时比 array[n] = value 快?

rust - 你如何在 Rust 中使用父模块导入?

http - 从网页中检索 HTML 源

java - 我可以将 Arrays.fill 与二维数组一起使用吗?如果是这样,我该怎么做?

javascript - 如何获取Firebase中的唯一ID

macros - Rust 宏可以处理多层嵌套表达式吗?

rust - 将 Option<impl Trait> 转换为 Option<Box<dyn Trait>>

collections - 迭代元组中集合中的已排序元素