gpt4 book ai didi

data-structures - 如何连接向量元素并将其存储回向量?

转载 作者:行者123 更新时间:2023-12-03 11:44:39 26 4
gpt4 key购买 nike

我有一个向量的向量,需要将第二个向量连接到第一个向量(如果删除了第二个也可以),即

f([[1,2,3], [4,5,6]]) => [[1,2,3,4,5,6], []]
或者
f([[1,2,3], [4,5,6]]) => [[1,2,3,4,5,6], [4,5,6]]
两者都还好。
我最初的解决方案是:
fn problem() {
let mut items = Vec::new();
items.push(vec![1,2,3]);
items.push(vec![4,5,6]);
items[0].append(&mut items[1]);
}
但是由于有两个可变的借位,因此存在编译时错误:
   |     items[0].append(&mut items[1]);
| ----- ------ ^^^^^ second mutable borrow occurs here
| | |
| | first borrow later used by call
| first mutable borrow occurs here
我可以用 Box/ Option解决它,但是我想知道是否有更好的方法来解决这个问题?

我的解决方案 Box:
fn solution_with_box() {
let mut items = Vec::new();
items.push(Box::new(vec![1,2,3]));
items.push(Box::new(vec![4,5,6]));
let mut second = items[1].clone();
items[0].as_mut().append(second.as_mut());
}
我的解决方案 Option:
fn solution_with_option() {
let mut items = vec::new();
items.push(some(vec![1,2,3]));
items.push(some(vec![4,5,6]));
let mut second = items[1].take();
items[0].as_mut().unwrap().append(second.as_mut().unwrap());
}

最佳答案

您可以按以下方式克隆items[1]的数据:

fn main() {
let mut items = Vec::new();
items.push(vec![1,2,3]);
items.push(vec![4,5,6]);
let mut a: Vec<i32> = items[1].clone();
&items[0].append(&mut a);
}
如果您不想克隆数据,则可以使用@trentcl建议的 mem::take
fn main() {
let mut items = Vec::new();
items.push(vec![1,2,3]);
items.push(vec![4,5,6]);
let second = std::mem::take(&mut items[1]);
items[0].extend(second);
println!("{:?}", items);
}

关于data-structures - 如何连接向量元素并将其存储回向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64302969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com