本文簡要介紹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 MaybeUninit.assume_init_mut用法及代碼示例
- Rust MaybeUninit.as_ptr用法及代碼示例
- Rust MaybeUninit.write_slice用法及代碼示例
- Rust MaybeUninit.assume_init_ref用法及代碼示例
- Rust MaybeUninit.zeroed用法及代碼示例
- Rust ManuallyDrop用法及代碼示例
- Rust MaybeUninit.write_slice_cloned用法及代碼示例
- Rust MaybeUninit.assume_init用法及代碼示例
- Rust MaybeUninit.write用法及代碼示例
- Rust MaybeUninit用法及代碼示例
- Rust MaybeUninit.as_mut_ptr用法及代碼示例
- Rust ManuallyDrop.into_inner用法及代碼示例
- Rust ManuallyDrop.new用法及代碼示例
- Rust MaybeUninit.array_assume_init用法及代碼示例
- Rust MaybeUninit.uninit用法及代碼示例
- Rust MaybeUninit.new用法及代碼示例
- Rust MaybeUninit.uninit_array用法及代碼示例
- Rust MaybeUninit.assume_init_read用法及代碼示例
- Rust Mutex.new用法及代碼示例
- Rust MetadataExt.st_ctime_nsec用法及代碼示例
- Rust MetadataExt.mtime_nsec用法及代碼示例
- Rust MetadataExt.nlink用法及代碼示例
- Rust MulAssign.mul_assign用法及代碼示例
- Rust Mutex.get_mut用法及代碼示例
- Rust MetadataExt.st_atime用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Struct std::iter::Map。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。