collect
nth函數
let a = [1, 2, 3]; let mut iter = a.iter(); assert_eq!(iter.nth(1), Some(&2)); assert_eq!(iter.nth(1), None);
let a = [1, 2, 3]; assert_eq!(a.iter().nth(10), None);
fold
fold(base, |accumulator, element| .. )
let m = (1..20).fold(1u64, |mul, x| mul*x);
需要注意的是,fold
的輸出結果的類型,最終是和base
的類型是一致的(如果base
的類型沒指定,那么可以根據前面m
的類型進行反推,除非m
的類型也未指定),也就是說,一旦我們將上面代碼中的base
從 1u64
改成 1
,那么這行代碼最終將會因為數據溢出而崩潰!
let a = [0i32, 1, 2]; let mut iter = a.iter().filter(|x| x.is_positive()); assert_eq!(iter.next(), Some(&1)); assert_eq!(iter.next(), Some(&2)); assert_eq!(iter.next(), None);
take(n)
的作用是取前n
個元素,而skip(n)
正好相反,跳過前n
個元素
zip
let v = vec![1u64, 2, 3, 4, 5, 6]; let val = v.iter() .enumerate() // 迭代生成標,並且每兩個元素剔除一個 .filter(|&(idx, _)| idx % 2 == 0) // 將下標去除,如果調用unzip獲得最后結果的話,可以調用下面這句,終止鏈式調用 // .unzip::<_,_, vec<_>, vec<_>>().1 .map(|(idx, val)| val) // 累加 1+3+5 = 9 .fold(0u64, |sum, acm| sum + acm); println!("{}", val);
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);