Лучший способ мутировать массивы в структурах?

У меня есть структура, подобная следующей

struct Foo {
   x: [i8;64]
   y: i8
}

И я хочу обновить значение внутри массива x в Foo, когда я передаю его через функцию. Лучшее решение, которое я могу придумать, это создать изменяемую копию x, а затем обновить эту копию, а затем создать новую Foo с новым массивом.

fn updateFoo(myFoo: Foo, index: usize, newvalue: i8) -> Foo {
    let mut newX = myFoo.x;
    newX[index] = newvalue;
    Foo {
         x: newX,
         y: myFoo.y,
    }
}

Является ли это эффективным и идиоматичным способом изменения массивов внутри структуры в Rust? Какие есть альтернативы для обновления значений внутри массива внутри Rust? Спасибо за помощь.

Я сам довольно новичок в Rust, поэтому не имею права отвечать, но разве вы не можете просто сделать аргумент myFoo изменяемой ссылкой, а не быть «принадлежащим»? Затем вы можете напрямую мутировать с помощью myFoo.x[index] = newValue.

Robin Zigmond 12.12.2020 23:15
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
1
311
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы также можете просто передать изменяемую ссылку Foo:

struct Foo {
    x: [i8; 64],
    y: i8,
}

fn updateFoo(myFoo: &mut Foo, index: usize, newvalue: i8) {
    myFoo.x[index] = newvalue;
}

детская площадка

Другие вопросы по теме