MST

星途 面试题库

面试题:Rust嵌套函数在复杂数据处理流程中的场景

假设你正在处理一个复杂的数据分析任务,数据以Vec<(String, i32)>的形式存储,其中String代表名称,i32代表数值。需要先对数据按名称进行分组,再对每组数据的数值进行特定的统计计算(比如计算平均值、总和等)。请使用Rust嵌套函数来设计这个数据处理流程,并说明为什么嵌套函数适用于这种场景。
40.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::collections::HashMap;

fn process_data(data: Vec<(String, i32)>) {
    let mut groups: HashMap<String, Vec<i32>> = HashMap::new();

    // 分组数据
    for (name, value) in data {
        groups.entry(name).or_insert_with(Vec::new).push(value);
    }

    // 定义嵌套函数进行统计计算
    fn calculate_stats(group: &[i32]) -> (f64, i32) {
        let sum: i32 = group.iter().sum();
        let avg = if group.len() > 0 { sum as f64 / group.len() as f64 } else { 0.0 };
        (avg, sum)
    }

    // 对每组数据进行统计计算
    for (name, group) in groups.into_iter() {
        let (avg, sum) = calculate_stats(&group);
        println!("Name: {}, Average: {}, Sum: {}", name, avg, sum);
    }
}

嵌套函数适用于这种场景的原因:

  1. 封装性:嵌套函数可以将特定的计算逻辑封装在主函数内部,使得主函数的逻辑更加清晰,外部代码无法直接访问嵌套函数,增强了代码的安全性和模块化。
  2. 作用域控制:嵌套函数只能在其外部函数内部被调用,其作用域被限制在外部函数内,避免了命名冲突,特别是在处理复杂任务时,不同的逻辑模块可以使用相同的内部函数名而不会相互干扰。
  3. 数据共享:嵌套函数可以直接访问外部函数的局部变量,在这个场景中,calculate_stats函数可以直接使用group数据,而无需将数据作为参数层层传递,提高了代码的简洁性和效率。