在结构中改变数组的最佳方法?

Best Way To Mutate Arrays in Structs?

提问人:SequenceToSequence 提问时间:12/13/2020 最后编辑:pretzelhammerSequenceToSequence 更新时间:2/19/2021 访问量:440

问:

我有一个如下结构

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

当我通过函数传递数组时,我想更新数组内的值。我能想到的最好的解决方案是制作一个可变副本,然后更新该副本,然后使用新数组创建一个新副本。xFooxFoo

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 中数组内的值?谢谢你的帮助。

阵 列 结构 可变

评论

0赞 Robin Zigmond 12/13/2020
我自己对 Rust 很陌生,所以没有资格回答——但你不能让这个论点成为一个可变的引用,而不是“拥有”吗?然后你可以直接通过 进行变异。myFoomyFoo.x[index] = newValue

答:

1赞 pretzelhammer 12/13/2020 #1

您也可以将可变 ref 传递给 Foo:

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

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

操场