Как обратиться к индексу массива с помощью отрицательного смещения?

#rust

#Ржавчина

Вопрос:

Скажем, у меня есть что-то вроде этого:

 let SIZE = 100;
let a = [0; SIZE];
let b = -1;
 

Как я могу тогда сделать что-то вроде:

 a[(SIZE/2) b];
 

Здесь есть несоответствие между индексом usize массива и i32 вычитаемого отрицательного числа. Есть ли удобный способ индексирования через массив также с отрицательными смещениями?

Ответ №1:

Как ответил @Aplet123, вы можете использовать приведения. Но если b значение всегда отрицательное, вы можете сохранить абсолютное значение и просто заменить его:

 let b = 1;

return a[SIZE/2 - b];
 

Ответ №2:

Сначала приведите его к isize (целому числу со знаком того же размера, что и a usize ):

 a[((SIZE / 2) as isize   b) as usize]
 

Комментарии:

1. Вам нужно преобразовать результат обратно usize в индекс