Vec::chunks 借用数据,我无法返回块



我有一个.txt文件与一些文本。例如

a
b
...
z

我想要得到Vec<Vec<&str>>大小为N或相等的块(实际上,下面的代码给了我<Vec<&[&str]>>,我没有真正看到差异。我想&[&str]是"借来的"。Vec[&str]想要google.)

这是我的尝试:

fn read_input()<'a>() -> Vec<&'a[&'a str]> {
let input = include_str!(r"PATHinput.txt");
let lines_info = input.lines().collect::<Vec<&'a str>>();
let chunked_lines_info = lines_info.chunks(7).collect::<Vec<&'a [&'a str]>>();
chunked_lines_info 
}

基本上,我想我知道为什么:chunkslines_info借用值,但'lines_info'在函数结束时被释放,但我试图返回一些借用释放数据的东西。我尝试.clone()lines_info之前获得块(最愚蠢的方式),但它从来没有工作。

我尝试了一些(更好的,我想)像这样:

fn read_input<'a>() -> Vec<[&'a str; 7]> {
let input = include_str!(r"PATHinput.txt");
let info = input.lines().array_chunks::<7>().collect();
info 
}

但是它给了我"不稳定的库"错误。

问题是lines_info().chunks()借用了lines_info,无法超越它。你需要collect()块。此外,您可以使用'static代替'a:

fn read_input() -> Vec<Vec<&'static str>> {
let input = include_str!(r"PATHinput.txt");
let lines_info = input.lines().collect::<Vec<_>>();
let chunked_lines_info = lines_info
.chunks(7)
.map(|v| v.iter().copied().collect())
.collect();
chunked_lines_info
}

最新更新