【发布时间】:2019-01-15 10:38:34
【问题描述】:
在 Rust 中,我有一个 Vec 或 Vec。我想将一个子 Vec 的内容与另一个子合并。
这是我的代码:
let mut a = vec![vec![1, 2, 3], vec![3, 4, 5, 6], vec![8, 9]];
a[0].append(&mut a[1]);
assert_eq!(&a, &[vec![1, 2, 3, 3, 4, 5, 6], vec![], vec![8, 9]])
问题是我不能两次借用 a 为可变的。
解决它最有效和最惯用的方法是什么?
【问题讨论】:
-
或者你可以交换内存:
let tmp = std::mem::replace(&mut a[1], Vec::new()):play.rust-lang.org/…。无论哪种方式,这都是重复的。 -
@Boiethios,我认为这不是 OP 所需要的。需要检查包含向量是否需要尾随,因此需要与最后一个和第一个元素匹配的元素。我不确定编辑和游乐场链接是否适合 OP 的需要,因为向量被替换为硬编码的 mem::replace index
-
@AkinerAlkan 好吧,我不是在这里猜测。如果 OP 想要这样做,让他更新问题。
-
@Boiethios,你是对的,所以我保留我的答案,让我们说如果 OP 真的有开始时提出的需求,那么他可以使用我的答案,如果不是,您的游乐场链接将是更简单合理的解决方案
-
@Boiethios @AkinerAlkan 抱歉,在您撰写回复时,我将问题更改为更简单的问题。对于简化和完整的问题,
std::mem::replace函数解决了我的问题。
标签: rust