我有一个.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
}
基本上,我想我知道为什么:chunks
从lines_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
}