MST

星途 面试题库

面试题:Rust迭代器链的性能优化与错误处理

在处理一个非常大的包含浮点数的`Vec<f64>`时,需要通过迭代器链对其进行开方操作,然后筛选出大于1.0的结果,并统计满足条件的数量。请编写Rust代码实现,同时要考虑可能出现的数学错误(如负数开方)并进行恰当的错误处理,尽可能优化性能,避免不必要的内存分配。
26.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn main() {
    let large_vec: Vec<f64> = (0..1000000).map(|x| x as f64).collect();

    let result_count = large_vec.iter()
       .filter_map(|&num| {
            if num < 0.0 {
                None
            } else {
                Some(num.sqrt())
            }
        })
       .filter(|&sqrt_num| sqrt_num > 1.0)
       .count();

    println!("满足条件的数量: {}", result_count);
}

解释

  1. 迭代器链: 使用iter方法获取迭代器,通过filter_map进行开方操作并处理负数开方错误(返回None),然后使用filter筛选出大于1.0的结果,最后使用count统计满足条件的数量。
  2. 错误处理: 对于负数开方,直接返回None,避免了sqrt函数可能抛出的NaN结果。
  3. 性能优化: 使用迭代器链避免了不必要的中间数据结构和内存分配。