계산할 때 반복기가 사용 된 것으로 보입니다. 어떻게 같은 반복자를 세고 그것을 반복 할 수 있습니까?카운트 및 반복에 동일한 반복기를 사용하는 방법은 무엇입니까?
파일의 행을 계산 한 다음 인쇄하려고합니다. 파일 내용을 읽을 수 있지만 줄 수를 셀 수는 있지만 내부 커서가 반복자의 끝에있는 것처럼 더 이상 줄을 반복 할 수 없습니다.
use std::fs::File;
use std::io::prelude::*;
fn main() {
let log_file_name = "/home/myuser/test.log";
let mut log_file = File::open(log_file_name).unwrap();
let mut log_content: String = String::from("");
//Reads the log file.
log_file.read_to_string(&mut log_content).unwrap();
//Gets all the lines in a Lines struct.
let mut lines = log_content.lines();
//Uses by_ref() in order to not take ownership
let count = lines.by_ref().count();
println!("{} lines", count); //Prints the count
//Doesn't enter in the loop
for value in lines {
println!("{}", value);
}
}
는
reset
방법을 가지고 있지 않지만, 내부 커서가 계산 후 반복자의 끝에 보인다. 다시
log_content.lines()
으로 전화하여 새
Lines
을 작성해야합니까? 아니면 내부 커서를 재설정 할 수 있습니까? 지금은
은, 내가 찾은 해결 방법은 새로운 반복자를 만드는 것입니다 :
use std::fs::File;
use std::io::prelude::*;
fn main() {
let log_file_name = "/home/myuser/test.log";
let mut log_file = File::open(log_file_name).unwrap();
let mut log_content: String = String::from("");
//Reads the log file.
log_file.read_to_string(&mut log_content).unwrap();
//Counts all and consume the iterator
let count = log_content.lines().count();
println!("{} lines", count);
//Creates a pretty new iterator
let lines = log_content.lines();
for value in lines {
println!("{}", value);
}
}
답변 해 주셔서 감사합니다. 이터레이터를 복제하는 것에 대해서는 생각해 보았습니다 만,이 경우에는 새로운 iterator를 만드는 것과 같습니다. 나는 반복문에 비용 (for 또는 in count 중 하나)이 있음을 이해하지만, 반복 할 때만 비용이 들며 필요할 때만 반복한다. 그러나 다시 반복 할 수 없다면 새로운 반복자를 만들 것입니다. – AnthonyB