当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。