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


Rust Iterator.for_each用法及代碼示例


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

用法

fn for_each<F>(self, f: F) where    Self: Sized,    F: FnMut(Self::Item),

對迭代器的每個元素調用閉包。

這等效於在迭代器上使用 for 循環,盡管breakcontinue 在閉包中是不可能的。使用for 循環通常更慣用,但在處理較長迭代器鏈末尾的項目時,for_each 可能更清晰。在某些情況下,for_each 也可能比循環更快,因為它會在 Chain 等適配器上使用內部迭代。

例子

基本用法:

use std::sync::mpsc::channel;

let (tx, rx) = channel();
(0..5).map(|x| x * 2 + 1)
      .for_each(move |x| tx.send(x).unwrap());

let v: Vec<_> =  rx.iter().collect();
assert_eq!(v, vec![1, 3, 5, 7, 9]);

對於這樣一個小例子,for 循環可能更幹淨,但 for_each 可能更適合保持具有更長迭代器的函數式樣式:

(0..5).flat_map(|x| x * 100 .. x * 110)
      .enumerate()
      .filter(|&(i, x)| (i + x) % 3 == 0)
      .for_each(|(i, x)| println!("{}:{}", i, x));

相關用法


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