FromIterator

FromIterator дозволяє створювати колекцію з Iterator.

fn main() {
    let primes = vec![2, 3, 5, 7];
    let prime_squares = primes.into_iter().map(|p| p * p).collect::<Vec<_>>();
    println!("prime_squares: {prime_squares:?}");
}
This slide should take about 5 minutes.

Iterator реалізує

fn collect<B>(self) -> B
where
    B: FromIterator<Self::Item>,
    Self: Sized

Існує два способи вказати B для цього методу:

  • З " turbofish": some_iterator.collect::<COLLECTION_TYPE>(), як показано. Скорочення _, використане тут, дозволяє Rust визначити тип елементів Vec.
  • З виведенням типу: let prime_squares: Vec<_> = some_iterator.collect(). Перепишіть приклад так, щоб він мав такий вигляд.

Існують базові реалізації FromIterator для Vec, HashMap тощо. Існують також більш спеціалізовані реалізації, які дозволяють робити цікаві речі, наприклад, перетворювати Iterator<Item = Result<V, E>> у Result<Vec<V>, E>.