Rust 程式設計視訊教程(進階)——003_1 迭代器介紹

linghuyichong發表於2020-01-09

頭條地址: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<Self::Item>;
    //省略其它內容
}

說明: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);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

令狐一衝

相關文章