Длина моего трехмерного массива равна 2, но доступ к индексу 2 вызывает панику во время выполнения - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть следующий код

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 Ответ

4 голосов
/ 27 февраля 2020
let array1: [i32; 2];

Массив 2 i32. Легко. Теперь i32 - это тип, который находится «внутри» массива 2. Поэтому, когда мы пишем:

let array2: [[i32; 32]; 2];

Это массив из 2 [i32; 32] элементов. Таким образом, это массив из 2 массивов по 32 i32 элементов. Когда вы делаете:

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...