1. 程式人生 > 其它 >【Rust】迭代器(四)

【Rust】迭代器(四)

環境

  • Time 2022-03-23
  • Rust 1.59.0

示例

collect

fn main() {
    let vec = vec![0, 1, 2, 3, 4];
    let doubled: Vec<_> = vec.iter().map(|e| e * 2).collect();
    for ele in doubled {
        println!("{ele}");
    }
}

partition

fn main() {
    let vec = vec![0, 1, 2, 3, 4];
    let (even, odd): (Vec<i32>, Vec<_>) = vec.iter().partition(|&e| e % 2 == 0);
    println!("even: {even:?}, odd: {odd:?}");
}

try_fold

fn main() {
    let vec = vec![1, 11, 111, 111];
    let triangular = vec.iter().try_fold(0_i8, |prev, &e| {
        if let Some(next) = prev.checked_add(e) {
            ControlFlow::Continue(next)
        } else {
            ControlFlow::Break(prev)
        }
    });

    println!("{triangular:?}");
}

fold

fn main() {
    let vec = vec![0, 1, 2, 3, 4];

    let result = vec
        .iter()
        .fold("-1".to_string(), |acc, x| format!("{}{}", acc, x));
    println!("{result}");
}

reduce

fn main() {
    let vec = vec![0, 1, 2, 3, 4];
    let result = vec.into_iter().reduce(|acc, x| acc + x);
    println!("{result:?}");
}

all

fn main() {
    let vec = vec![0, 1, 2, 3, 4];
    let result = vec.iter().all(|e| e < &10);
    println!("{result:?}");
}

any

fn main() {
    let vec = vec![0, 1, 2, 3, 4];
    let result = vec.iter().any(|e| e < &0);
    println!("{result:?}");
}

find

fn main() {
    let vec = vec![0, 1, 2, 3, 4];
    let result = vec.iter().find(|&&e| e > 2);
    println!("{result:?}");
}

總結

瞭解了迭代器中相關的一些方法。

附錄