MST

星途 面试题库

面试题:Rust中HashMap序列化与反序列化基础实现

在Rust中,给定一个`HashMap<String, i32>`,如何使用`serde`库对其进行序列化并将结果输出到文件中,以及从文件中反序列化回`HashMap<String, i32>`?请写出主要代码逻辑,并说明需要引入哪些必要的依赖和特性。
41.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 引入依赖和特性

    • Cargo.toml文件中添加以下依赖:
    [dependencies]
    serde = { version = "1.0", features = ["derive"] }
    serde_json = "1.0"
    std::fs::File;
    
    • 代码中需要为HashMap结构体派生SerializeDeserialize特性。
  2. 序列化代码逻辑

    use std::collections::HashMap;
    use std::fs::File;
    use serde::{Serialize, Deserialize};
    use serde_json;
    
    fn serialize_to_file(map: &HashMap<String, i32>, file_path: &str) -> Result<(), serde_json::Error> {
        let serialized = serde_json::to_string_pretty(map)?;
        let mut file = File::create(file_path)?;
        file.write_all(serialized.as_bytes())?;
        Ok(())
    }
    
  3. 反序列化代码逻辑

    fn deserialize_from_file(file_path: &str) -> Result<HashMap<String, i32>, serde_json::Error> {
        let file = File::open(file_path)?;
        let map: HashMap<String, i32> = serde_json::from_reader(file)?;
        Ok(map)
    }
    
  4. 示例使用

    fn main() {
        let mut map = HashMap::new();
        map.insert("key1".to_string(), 1);
        map.insert("key2".to_string(), 2);
    
        let file_path = "output.json";
        serialize_to_file(&map, file_path).unwrap();
    
        let deserialized_map = deserialize_from_file(file_path).unwrap();
        println!("Deserialized map: {:?}", deserialized_map);
    }
    

以上代码中,serialize_to_file函数将HashMap序列化为漂亮格式的JSON字符串并写入文件,deserialize_from_file函数从文件中读取并反序列化为HashMap。在main函数中展示了简单的使用示例。