gpt4 book ai didi

rust - 检测迭代器的最后一项

转载 作者:行者123 更新时间:2023-12-03 11:32:07 26 4
gpt4 key购买 nike

我的代码逐行分析日志文件。最后一行通常是空 ("") 行,应完全忽略。但是如何检测循环中的最后一行?
迭代器不知道它有多长,并且将所有项目收集到一个数组中效率低下并且可能会过多地填满内存。

let file = File::open(&files[index])
.map_err(|e| format!("Could not open log file: {}", e))?;
let reader = BufReader::new(file);
for (index, line) in reader.lines().enumerate() {
let line = line.unwrap();
if is_last_line() && line == "" {
break;
}
// do something with the line...
}

is_last_line() 不存在。如何检测最后一行?

最佳答案

您可以使用 Itertools::with_position功能:

use itertools::{Itertools, Position};

let file = File::open(&files[index]).map_err(|e| format!("Could not open log file: {}", e))?;
let reader = BufReader::new(file);

for line in reader.lines().enumerate().with_position() {
match line {
Position::Last((idx, _)) => println!("line {} is the last line!", idx),
Position::First((idx, text)) | Position::Middle((idx, text)) => (),
Position::Only((idx, _)) => println!("there is only one line in your file"),
}
}

关于rust - 检测迭代器的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65680448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com