MST

星途 面试题库

面试题:Rust中实现复杂嵌套数据结构的自定义控制台输出格式

假设有一个嵌套的数据结构,外层是一个 `Vec`,里面每个元素是一个结构体 `Group`,`Group` 结构体包含一个 `String` 类型的字段 `name` 和一个 `Vec<i32>` 类型的字段 `nums`。要求自定义该嵌套结构在控制台输出的格式,格式为:`Group: [name] - [num1, num2, ...]`,例如 `Group: [group1] - [1, 2, 3]`,写出完整的实现代码以及相关的格式化 trait 实现思路。
20.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::fmt;

struct Group {
    name: String,
    nums: Vec<i32>,
}

impl fmt::Display for Group {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "Group: [{}] - [", self.name)?;
        for (i, num) in self.nums.iter().enumerate() {
            if i > 0 {
                write!(f, ", ")?;
            }
            write!(f, "{}", num)?;
        }
        write!(f, "]")
    }
}

fn main() {
    let groups: Vec<Group> = vec![
        Group {
            name: "group1".to_string(),
            nums: vec![1, 2, 3],
        },
        Group {
            name: "group2".to_string(),
            nums: vec![4, 5, 6],
        },
    ];

    for group in &groups {
        println!("{}", group);
    }
}

格式化 trait 实现思路

  1. 实现 fmt::Display trait:为 Group 结构体实现 fmt::Display trait,这样就可以使用 println!("{}", group) 这种格式化输出方式。
  2. 格式化输出逻辑
    • fmt 方法中,首先输出固定的前缀 Group: [ 以及结构体中的 name 字段,再输出 ] - [
    • 然后遍历 nums 字段中的元素,依次输出每个数字,并在数字之间添加逗号和空格作为分隔符。
    • 最后输出后缀 ],完成格式化输出。
  3. main 函数中测试:创建一个包含多个 Group 结构体实例的 Vec,遍历这个 Vec 并使用 println! 输出每个 Group 实例,就会按照自定义的格式输出。