Rust中peekable的使用

在 Rust 中,从迭代器中获取(也就是"消费")一个元素时,每次调用 next 方法都会"消费"迭代器的一个元素,这意味着此元素被从迭代器中移除并返回给调用者, 一旦一个元素被消费,它就不能再次从同一个迭代器中获取。如下:

复制代码
fn main() {
    let numbers = vec![1, 3, 5, 4, 9, 6, 7];
    let mut iter = numbers.iter(); // 创建一个迭代器

    // 消费第一个元素
    if let Some(first) = iter.next() {
        println!("The first number is {}", first);
    }

    // 继续消费剩余的元素
    for number in iter {
        println!("Next number: {}", number);
    }
}

输出:

复制代码
The first number is 1
Next number: 3
Next number: 5
Next number: 4
Next number: 9
Next number: 6
Next number: 7

iter.next() 首先被调用来消费第一个元素。一旦这个元素被消费,它就不再是迭代器的一部分了。随后的 for 循环继续迭代剩余的元素,每次迭代循环都会消费一个元素,直到所有元素被消费完毕。

假如有这样一个Vec ,有这样一个需求:如果下一个元素是偶数,则打印出当前元素。

这时就要用到迭代器的 peekable方法, 其允许查看迭代器中的下一个元素,而不会消费它。

这样,就可以根据下一个元素的值来决定是否打印当前元素。
peek本身是偷看,窥视的意思

复制代码
fn main() {
    let numbers = vec![1, 3, 5, 4, 9, 6, 7];
    let mut iter = numbers.iter().peekable();

    while let Some(&current) = iter.next() {
        if let Some(&&next) = iter.peek() {
            if next % 2 == 0 {
                println!("{}", current);
            }
        }
    }
}

输出为:

复制代码
5
9

如上 创建了一个 Vec<i32> 的迭代器,并使用 peekable 方法使其成为 Peekable 迭代器。

使用 while let 循环遍历迭代器。在每次循环中,使用 iter.next() 获取当前元素。

使用 iter.peek() 查看下一个元素,但不从迭代器中移除它。

如果下一个元素是偶数(next % 2 == 0),打印出当前元素。

如此,这段代码遍历了整个 Vec<i32>,只有在下一个元素是偶数时,才会打印当前元素。

本文由mdnice多平台发布

相关推荐
JavaGuide5 小时前
SpaceX 工程师的 AI Coding 玩法太牛了, 200 多个 Agent 并行!
前端·后端
SQL-First布道者5 小时前
⚡Spring JDBC 完整体系 · 第 10 集 · 手搓 `BaseCondition`
java·spring boot·后端·spring·mybatis·spring jdbc
2601_962074685 小时前
Spring Boot的无缝衔接:深入解析与实践
数据库·spring boot·后端
聪明蛋子哟6 小时前
多智能体协作的三种模式:从群聊到分层,如何设计可扩展的Agent系统
后端·python·flask
DolphinDB6 小时前
告别手写代码:Trae + DolphinDB Skill,10 分钟造一个懂期货的投研 Agent
后端
ChenNyan6 小时前
从一块 ESP32-S3 开发板到 AI 陪伴设备:我们如何搭建一套可持续演进的端云架构
后端
ValueHD7 小时前
视频会议终端是什么,有哪几种类型?
后端·音视频·视频编解码·腾讯会议
.Hypocritical.7 小时前
SpringBoot 各版本 Profile 多环境配置完整对比(2.x/ 2.4+ / 3.x/4.x
java·spring boot·后端
乐橙开放平台7 小时前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
笔记·后端·物联网·自动化·音视频·智能家居
卷无止境8 小时前
FastAPI 的可观测性进化,从打日志到看清整个系统的呼吸
后端·python·fastapi