當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Iterator.map用法及代碼示例


本文簡要介紹rust語言中 std::iter::Iterator.map 的用法。

用法

fn map<B, F>(self, f: F) -> Map<Self, F> where    F: FnMut(Self::Item) -> B,

接受一個閉包並創建一個迭代器,該迭代器在每個元素上調用該閉包。

map() 通過其參數將一個迭代器轉換為另一個迭代器:實現 FnMut 的東西。它產生一個新的迭代器,它在原始迭代器的每個元素上調用這個閉包。

如果你善於思考類型,你可以這樣想map():如果你有一個迭代器,它為你提供某種類型的元素 A ,並且你想要一個其他類型的迭代器 B ,你可以使用 map() ,傳遞一個帶有 A 並返回 B 的閉包。

map() 在概念上類似於 for 循環。但是,由於 map() 是惰性的,因此最好在您已經在使用其他迭代器時使用它。如果您正在為副作用進行某種循環,則使用 for 比使用 map() 更為慣用。

例子

基本用法:

let a = [1, 2, 3];

let mut iter = a.iter().map(|x| 2 * x);

assert_eq!(iter.next(), Some(2));
assert_eq!(iter.next(), Some(4));
assert_eq!(iter.next(), Some(6));
assert_eq!(iter.next(), None);

如果你正在做某種副作用,更喜歡 for map()

// don't do this:
(0..5).map(|x| println!("{}", x));

// it won't even execute, as it is lazy. Rust will warn you about this.

// Instead, use for:
for x in 0..5 {
    println!("{}", x);
}

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::iter::Iterator.map。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。