MST

星途 面试题库

面试题:Rust迭代器模式在自定义类型及性能优化方面的应用

定义一个自定义结构体`Point`,包含`x`和`y`两个`i32`类型的字段。现在有一个`Vec<Point>`,使用迭代器模式找出所有`x`和`y`坐标之和大于100的点,并计算这些点到原点(0, 0)的距离平方和。同时,说明如何在实现过程中进行性能优化,写出代码及优化说明。距离计算公式为:$distance = \sqrt{(x - 0)^2+(y - 0)^2}$
39.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let points: Vec<Point> = vec![
        Point { x: 50, y: 60 },
        Point { x: 20, y: 30 },
        Point { x: 80, y: 90 },
    ];

    let sum_of_squared_distances: i32 = points
      .iter()
      .filter(|point| point.x + point.y > 100)
      .map(|point| point.x * point.x + point.y * point.y)
      .sum();

    println!("Sum of squared distances: {}", sum_of_squared_distances);
}

性能优化说明

  1. 使用迭代器: 迭代器是 Rust 中高效处理集合的方式。filtermap 方法都是惰性求值的,只有在调用 sum 时才会真正遍历集合,减少不必要的中间数据存储。
  2. 避免不必要的计算: 直接计算距离的平方而不是先计算距离再平方。因为计算平方根是一个相对昂贵的操作,在只需要距离平方和的情况下,避免这个操作可以提升性能。
  3. 使用 iter 而不是 into_iter: 在这个场景下,iter 方法返回的 &Point 引用足够,不需要消耗掉 points 向量,从而避免了不必要的内存移动或复制。