Vector 需要向量切片才能活得更长吗

Vector 需要向量切片才能活得更长吗,vector,rust,lifetime,Vector,Rust,Lifetime,有没有办法让这个向量的切片持续足够长的时间,这样我就可以在这种圆形结构中使用它们 fn populate_chain(file_path: &str) -> HashMap<String, HashSet<&String>> { println!("loading..."); let time = util::StopWatch::new(); let mut words = HashMap::new(); {

有没有办法让这个向量的切片持续足够长的时间,这样我就可以在这种圆形结构中使用它们

fn populate_chain(file_path: &str) -> HashMap<String, HashSet<&String>> {
    println!("loading...");
    let time = util::StopWatch::new();
    let mut words = HashMap::new();
    {
        let f = |mut x: Vec<String>| {
            let word = x.pop().unwrap();
            words.insert(word, HashSet::new());
        };
        Csv::process_rows(f, file_path, "\t");
    }

    let col: Vec<(String, HashSet<&String>)> = words.clone().into_iter().collect();
    let m: usize = col.len() - 1;
    for i in 0..m {
        let ref k: String = col[i].0;
        for j in i..m {
            let ref nk: String = col[j].0;
            if check_link(k, nk) {
                words.get_mut(k).unwrap().insert(nk);
                words.get_mut(nk).unwrap().insert(k);
            }
        }
    }

    time.print_time();
    words
}
我使用双for循环将相关单词链接在一起,以便以后可以快速查找它们

以下是编译器错误

错误:`col`的寿命不够长 ->src/main.rs:28:29 | 28 |设ref k:String=col[i].0; |^^^^活得不够长 ... 40 | } |-借来的价值仅在此处有效 | 注意:借用值必须在13:72对块上定义的匿名生存期1有效。。。 ->src/main.rs:13:73 | 13 | fn填充链文件路径:&str->HashMap{ | ^ 错误:`col`的寿命不够长 ->src/main.rs:30:34 | 30 | let ref nk:String=col[j].0; |^^^^活得不够长 ... 40 | } |-借来的价值仅在此处有效 | 注意:借用值必须在13:72对块上定义的匿名生存期1有效。。。 ->src/main.rs:13:73 | 13 | fn填充链文件路径:&str->HashMap{ |
我可以从你的函数签名告诉你,你在写这个函数时会遇到很大的问题,至少如果你想让它在结果中包含非空的哈希集

fn populate_chain(file_path: &str) -> HashMap<String, HashSet<&String>>
此函数签名中包含引用;它们省略了生存期。如果将推断的生存期显式化,则如下所示:

fn populate_chain<'a>(file_path: &'a str) -> HashMap<String, HashSet<&'a String>>
换句话说:该函数声明,给定一些生存期为“a”的字符串片段,它将返回一个包含生存期为“a”的字符串对象的集合

但您无法在代码中分配此类字符串对象:

因此,您陷入了困境;无论您在该函数体中添加了什么,您都无法提供一个实现,该实现将返回关于哈希集的非平凡结果


但是,并不是所有的都丢失了。例如,您可以修改您的函数,使其也将对具有适当生存期的TypedArena的引用作为附加参数,然后在那里分配字符串。另一个更简单的选择是使用HashSet而不是HashSet…

我建议您使用一个库来构建图形结构cture。欢迎来到Stack Overflow!作为这个社区的一部分,需要一些基本的指导原则,比如在提问时提供一个。这个问题目前没有提供正确的导入,它省略了util的声明,并且没有定义Csv。它的代码中也有各种各样的垃圾。请在我们讨论时提供最小的复制我想你不需要秒表来告诉我们这个问题。还有,有。请告诉我们这有什么不同。