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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。