如何交换向量中不可复制的元素?

How to swap non-copyable elements in a vector?

我想交换向量的 String 个元素

let mut v_sa: Vec<String> = vec![];
...
let temp_a = v_sa_ib[j];
v_sa_ib[j] = v_sa_ib[j+1];
v_sa_ib[j+1] = temp_a;

它适用于整数,但不适用于 Strings。我还尝试创建第二个向量 temp_b(与 temp_a 相同类型)并填充它而不是交换,但我总是得到相同的错误:the type of this value must be known in this context.

我该如何解决?

您可以使用 swap() method of Vec 直接交换两个元素:

v_sa_ib(j, j+1);

还有一个通用的交换函数,叫做std::mem::swap,但是在这里很难使用,因为获取相同Vec的两个不同元素的两个可变引用非常复杂。

它与整数一起工作的原因是整数实现了 Copy 特性,因此 Rust 可以自动创建新副本。