如何在Rust Vec中获取和替换值?

Guy*_*and 2 collections vector rust

我正在寻找的是一种替换方法:

pub fn replace(&mut self, index: usize, element: T) -> T
Run Code Online (Sandbox Code Playgroud)

替换向量中位置索引处的元素,并返回现有值。

调用remove + insert对我来说似乎很浪费。

mca*_*ton 6

您可以在任何使用std::mem::replace以下变量对其容器进行可变引用的容器上轻松模拟:

fn main() {
    let mut v = vec![1, 2, 3, 4, 5, 6];

    let got = std::mem::replace(&mut v[3], 42);

    println!("v = {:?}", v);
    println!("got = {:?}", got);
}
Run Code Online (Sandbox Code Playgroud)

永久链接到操场

结果:

v = [1, 2, 3, 42, 5, 6]
got = 4
Run Code Online (Sandbox Code Playgroud)

对于Vec,如果要替换一系列元素,则对方法感兴趣,该方法splice替换值并返回旧的。但是,对于单个值,它可能效率较低。

  • 请注意,如果您**不需要之前的值**,您可以直接赋值:`v[3] = 42;`。另请注意,如果超出范围,则会出现恐慌。 (8认同)