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

如何在Rust中实现迭代器遇首个不满足断言元素即停止迭代?

Rust中获取开头连续满足断言的元素

你需要的是只保留开头连续满足断言的元素,遇到第一个不满足的就立即停止迭代,原代码用filter会遍历整个集合并保留所有满足条件的元素,显然不符合需求。

直接用Rust标准库提供的take_while迭代器适配器就能解决这个问题:

fn first_predicate<F>(vec: Vec<i32>, f: F) -> Vec<i32>
where
    F: FnMut(&i32) -> bool,
{
    vec.into_iter().take_while(f).collect()
}

为什么这个可行?

take_while的逻辑是:逐个迭代元素,只要断言返回true就将元素加入结果;一旦遇到第一个让断言返回false的元素,立刻终止迭代,后续所有元素都不会被处理。完全匹配你“取开头连续满足组”的需求。

测试示例

fn main() {
    let nums = vec![2, 4, 6, 3, 8, 10];
    let even_prefix = first_predicate(nums, |&x| x % 2 == 0);
    println!("{:?}", even_prefix); // 输出 [2, 4, 6]
}

内容的提问来源于stack exchange,提问作者St.Antario

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:33:21