首页 > 解决方案 > 在字符串拆分上使用映射时无法推断类型

问题描述

我目前正在尝试通过 Advent of Code 来学习 Rust。我有一个包含整数的文件(每行一个)作为输入。我现在尝试使用以下代码解析该文件:

use std::fs::File;
use std::io::prelude::*;

fn main() -> std::io::Result<()> {
    let mut file = File::open("./input/day1_input.txt")?;
    let mut contents = String::new();
    file.read_to_string(&mut contents)?;
    let split = contents.split("\n").map(|x| x.parse().unwrap());
    for x in split {
        println!("{}",x);
    }
    Ok(())
}

在 for 循环中拆分时出现编译器错误,错误消息为:“无法推断类型”。有人可以解释一下为什么我会收到此消息以及执行此操作的正确方法是什么?欢迎其他提示如何更有效地完成此解析,但不是该问题的主要原因。

标签: rust

解决方案


编译器不知道您正在解析哪种特定数字类型。尝试parse::<u32>()或任何其他。

作为文件阅读建议,请注意大文件,因为您在单个String. 由于 a 中的每个内存String都必须是连续的,因此可能没有足够的连续内存块来存储整个文件的内容。因此,您最好将您的内容包装File在 a 中BufReader,这样您就可以请求部分内容,而不必担心进行许多极其昂贵的操作系统调用。然后你以可控大小读取内容,比如几兆字节的行或块。


推荐阅读