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

1sbrub3j  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(143)

我有一个包含一些文本的.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',但我尝试返回一些借用释放数据的东西。
我尝试了这样的方法(我想更好):

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 
}

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

qxsslcnc

qxsslcnc1#

问题是lines_info().chunks()借用了lines_info,不能比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
}

相关问题