fn main() {
let words: Vec<String> = vec!["abc".to_string(), "de".to_string(), "fghi".to_string()];
let total_length = words.iter()
.filter(|word| word.len() >= 3)
.map(|word| word.to_uppercase())
.map(|uppercase_word| uppercase_word.len())
.sum();
println!("Total length: {}", total_length);
}
Rust的优化解释
- 延迟计算:在链式调用中,迭代器适配器(如
filter
、map
)都是惰性的。它们并不会立即处理数据并生成中间数据结构。只有当调用sum
这样的终端方法时,才会开始真正的迭代计算。
- 直接处理:
filter
方法直接对源迭代器中的元素进行判断,只有符合条件的元素才会传递给下一个适配器。同样,map
方法对传递过来的元素直接进行转换,不会产生额外的中间集合。
- 流水线式执行:整个链式调用就像一个流水线,元素从源迭代器开始,依次经过各个适配器的处理,最终到达终端方法。在这个过程中,不会生成多余的中间数据结构,从而提高了内存效率和性能。