Мне нужно проанализировать файлы, содержащие номера, разделенные табуляцией, я также знаю, что их всегда будет только два. Поскольку мои файлы могут быть размером в несколько гигабайт, я подумал, что мой текущий метод синтаксического анализа был правильным. Похоже, я мог бы сделать карту быстрее, учитывая, что у меня фиксированный размер, но я не смог найти как.
use std::io::{self, prelude::*, BufReader};
type Record = (u32, u32);
fn read(content: &[u8]) -> io::Result<Vec<Record>> {
Ok(BufReader::new(content)
.lines()
.map(|line| {
let nums: Vec<u32> = line
.unwrap()
.split("\t")
.map(|s| s.parse::<u32>().unwrap())
.collect();
(nums[0], nums[1])
})
.collect::<Vec<Record>>())
}
fn main() -> io::Result<()> {
let content = "1\t1\n\
2\t2\n";
let records = read(content.as_bytes())?;
assert_eq!(records.len(), 2);
assert_eq!(records[0], (1, 1));
assert_eq!(records[1], (2, 2));
Ok(())
}
Детская площадка