РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
651 of 1245 menu

Метод flat_map

Метод flat_map класса Iterator применяет функцию к каждому элементу исходного итератора. В отличие от map, функция должна возвращать не обычное значение, а итератор. Затем flat_map объединяет все полученные итераторы в один последовательный плоский итератор. Параметром метод принимает замыкание, которое преобразует элемент в итератор.

Метод возвращает новый итератор, который выдаёт элементы всех вложенных итераторов по порядку. Это удобно, когда каждый элемент нужно развернуть в несколько значений.

Синтаксис

iterator.flat_map(|x| /* iterator */)

Пример

Давайте развернём каждое число в диапазон от 0 до этого числа и соберём всё в один вектор:

fn main() { let res: Vec<i32> = vec![1, 2, 3, 4, 5] .into_iter() .flat_map(|x| 0..x) .collect(); println!("{:?}", res); }

Результат выполнения кода:

[0, 0, 1, 0, 1, 2, 0, 1, 2, 3]

Пример

Давайте разобьём каждую строку на символы и получим один плоский список символов:

fn main() { let res: Vec<char> = vec!["abcde", "12345"] .into_iter() .flat_map(|s| s.chars()) .collect(); println!("{:?}", res); }

Результат выполнения кода:

['a', 'b', 'c', 'd', 'e', '1', '2', '3', '4', '5']

Пример

Давайте сравним поведение map и flat_map на одном и том же наборе данных:

fn main() { let mapped: Vec<_> = vec![1, 2, 3] .into_iter() .map(|x| vec![x, x * 10]) .collect(); println!("{:?}", mapped); let flat_mapped: Vec<_> = vec![1, 2, 3] .into_iter() .flat_map(|x| vec![x, x * 10]) .collect(); println!("{:?}", flat_mapped); }

Результат выполнения кода:

[[1, 10], [2, 20], [3, 30]] [1, 10, 2, 20, 3, 30]

Смотрите также

  • метод map,
    который преобразует каждый элемент итератора
  • метод flatten,
    который разворачивает вложенные итераторы в один
  • метод filter_map,
    который одновременно фильтрует и преобразует элементы
  • метод collect,
    который собирает элементы итератора в коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить