面试题答案
一键面试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);
}
解释
- 迭代器链: 使用
iter
方法获取迭代器,通过filter_map
进行开方操作并处理负数开方错误(返回None
),然后使用filter
筛选出大于1.0的结果,最后使用count
统计满足条件的数量。 - 错误处理: 对于负数开方,直接返回
None
,避免了sqrt
函数可能抛出的NaN
结果。 - 性能优化: 使用迭代器链避免了不必要的中间数据结构和内存分配。