什么是在Rust中拥有多个链接列表并在它们之间移动数据的正确方法?

sup*_*inf 2 reference linked-list vector rust borrow-checker

有多个std::collections::LinkedLists 的正确方法是什么,这些列表的编号在编译时是未知的?

我正在填充数据以及合并它们(例如使用append()).我认为有一个包含这些列表的向量或包含对这些列表的引用会很好.

我尝试过以下方法:

use std::collections::LinkedList;

fn listtest() {
    let mut v: Vec<LinkedList<i32>> = Vec::new();
    v.push(LinkedList::new()); // first list
    v.push(LinkedList::new()); // second list
    v[0].push_back(1); // fill with data
    v[1].push_back(3); // fill with data
    v[0].append(&mut v[1]); // merge lists
}

fn main() {
    listtest();
}
Run Code Online (Sandbox Code Playgroud)

这无法编译,因为我v在使用时有两个可变引用append().我也尝试过使用Vec<&mut LinkedList<i32>>,但没有成功.

这个问题的正确方法是什么?

She*_*ter 5

没有正确的方法.一种可能性是使用split_at_mut.这会创建两个单独的切片,每个切片可以与另一个切片分开改变:

use std::collections::LinkedList;

fn main() {
    let mut v = vec![LinkedList::new(), LinkedList::new()];
    v[0].push_back(1);
    v[1].push_back(3);

    {
        let (head, tail) = v.split_at_mut(1);
        head[0].append(&mut tail[0]);
    }

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

看到: