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


Rust Map用法及代码示例


本文简要介绍rust语言中 Struct std::iter::Map 的用法。

用法

pub struct Map<I, F> { /* fields omitted */ }

iter 的值映射到 f 的迭代器。

struct map 方法在 Iterator 上创建。有关更多信息,请参阅其文档。

关于副作用的说明

map 迭代器实现了 DoubleEndedIterator ,这意味着您也可以向后 map

let v: Vec<i32> = vec![1, 2, 3].into_iter().map(|x| x + 1).rev().collect();

assert_eq!(v, [4, 3, 2]);

但是如果你的闭包有状态,向后迭代可能会以你意想不到的方式发生。让我们通过一个例子。首先,在前进方向上:

let mut c = 0;

for pair in vec!['a', 'b', 'c'].into_iter()
                               .map(|letter| { c += 1; (letter, c) }) {
    println!("{:?}", pair);
}

这将打印“('a', 1), ('b', 2), ('c', 3)”。

现在考虑一下我们添加对 rev 的调用的这种转折。此版本将打印 ('c', 1), ('b', 2), ('a', 3) 。请注意,字母是颠倒的,但计数器的值仍然按顺序排列。这是因为 map() 仍然在每个项目上被延迟调用,但我们现在从向量后面弹出项目,而不是从前面移动它们。

let mut c = 0;

for pair in vec!['a', 'b', 'c'].into_iter()
                               .map(|letter| { c += 1; (letter, c) })
                               .rev() {
    println!("{:?}", pair);
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::iter::Map。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。