簡體   English   中英

Vec::chunks 借用數據,我不能返回塊

[英]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 
}

基本上,我想我知道為什么會這樣: chunkslines_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM