You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何实现持续跳过符合条件元素的迭代器功能?

如何让Rust迭代器持续跳过符合条件的元素

Rust的Iterator方法skip_while有个特性:当闭包第一次返回false后,就会停止跳过逻辑,后续所有元素都会被返回。如果想要持续跳过所有符合条件的元素(不管之前有没有返回过false),可以用以下迭代器适配器方式实现:

先看原问题示例代码:

fn main() {
    let lines = [
        "",
        "a",
        "",
        "b",
        "",
        "c",
    ];
    for line in lines.iter().skip_while(|x| x.is_empty()) {
        println!("line is {:?}, {:?}", line, line.is_empty());
    }
}

它的输出是:

line is "a", false
line is "", true
line is "b", false
line is "", true
line is "c", false

我们期望的输出是只保留非空行:

line is "a", false
line is "b", false
line is "c", false

解决方案:使用filter适配器

直接用filter就能实现“持续跳过符合条件元素”的需求。filter会对迭代器的每一个元素执行判断闭包,只保留闭包返回true的元素(反过来就是跳过所有返回false的元素),完全符合场景要求。

修改后的代码:

fn main() {
    let lines = [
        "",
        "a",
        "",
        "b",
        "",
        "c",
    ];
    // 过滤掉所有空字符串,只保留非空元素
    for line in lines.iter().filter(|x| !x.is_empty()) {
        println!("line is {:?}, {:?}", line, line.is_empty());
    }
}

核心区别

  • skip_while是前缀跳过:仅跳过开头连续符合条件的元素,遇到第一个不符合的就停止跳过逻辑
  • filter是全局过滤:对每个元素都做判断,全程跳过符合条件的元素

内容的提问来源于stack exchange,提问作者JamesThomasMoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:46:13