标签:strong inf rust none 元素 == 就是 生成 mic
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);
标签:strong inf rust none 元素 == 就是 生成 mic
原文地址:https://www.cnblogs.com/chenguifeng/p/12243999.html