热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Rust编程视频教程(进阶)——003_1迭代器介绍

视频地址头条地址:https:www.ixigua.comi677586170644791348B站地址:https:www.bilibili.comvideoav81202






视频地址

头条地址:https://www.ixigua.com/i677586170644791348...

B站地址:https://www.bilibili.com/video/av81202308/


讲解内容

1、迭代器负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。

2、创建一个迭代器:迭代器是惰性的,意思是在调用方法使用迭代器之前,它都不会有任何效果。

例子:

let v1 = vec![1, 2, 3];
let v1_iter = v1.iter();

3、使用迭代器

例子:在for循环中使用迭代器

let v1 = vec![1, 2, 3];
let v1_iter = v1.iter();
for val in v1_iter {
println!("Got: {}", val);
}

4、Iterator trait:迭代器都实现了Iterator trait,这个trait定义于标准库中。该trait定义如下:

trait Iterator {
type Item;
fn next(mut self) -> Option;
//省略其它内容
}

说明:type Item和Self::Item这种用法叫做定义trait的关联类型。

Item类型将是迭代器返回元素的类型,next方法是Iterator实现者被要求定义的唯一方法,next一次返回一个元素,当迭代器结束,则返回None。

5、next方法:迭代器通过next方法来消费一个项。

(1)不可变引用的使用迭代器

let v1 = vec![1, 2, 3];
let mut v1_iter = v1.iter();
if let Some(v) = v1_iter.next() {
println!("{}", v); //1
}
if let Some(v) = v1_iter.next() {
println!("{}", v); //2
}
if let Some(v) = v1_iter.next() {
println!("{}", v); //3
}
if let Some(v) = v1_iter.next() {
println!("{}", v); //3
} else {
println!("Reached end!") //printf "Reached end"
}

(2)如果希望迭代可变引用,则可以调用iter_mut。

例子:

let mut v2 = vec![1, 2, 3];
let mut v2_iter = v2.iter_mut();
if let Some(v) = v2_iter.next() {
*v = 3;
}
let it = v2.iter();
//打印:3,2,3
for val in it {
println!("{}", val);
}



视频教程
迭代器


推荐阅读
author-avatar
小啊小刺猬0801_302
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有