[英]Vec::chunks borrows data and I can't return chunks
我有一個包含一些文本的.txt
文件。 例如
a
b
...
z
我想得到Vec<Vec<&str>>
大小為N
或大小相等的塊(實際上,下面的代碼給了我<Vec<&[&str]>>
我真的看不出有什么區別。我想&[&str]
是“借來的” Vec[&str]
想谷歌。)
這是我的嘗試:
fn read_input()<'a>() -> Vec<&'a[&'a str]> {
let input = include_str!(r"PATH\input.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”在 function 結束時釋放,但我嘗試返回借用釋放數據的東西。 我在獲取塊之前嘗試.clone()
lines_info
(最虛擬的方式),但它從來沒有用過。
我試過這樣的東西(更好,我想):
fn read_input<'a>() -> Vec<[&'a str; 7]> {
let input = include_str!(r"PATH\input.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"PATH\input.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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.