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

Метод map_while

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

Синтаксис

iter.map_while(f)

Пример

Давайте возьмем числа от 1 до 10 и остановимся, когда число станет больше 5. Функция будет возвращать Some, пока условие выполняется, и None, когда число превысит 5:

fn main() { let iter = 1..=10; let res: Vec<i32> = iter.map_while(|x| { if x <= 5 { Some(x) } else { None } }).collect(); println!("{:?}", res); }

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

[1, 2, 3, 4, 5]

Пример

Давайте обработаем строки, пока длина строки не станет равной 3 символам. Как только встретится строка длиной 3, итерация прекратится:

fn main() { let vec = vec!["a", "ab", "abc", "abcd", "abcde"]; let iter = vec.iter(); let res: Vec<&str> = iter.map_while(|s| { if s.len() < 3 { Some(*s) } else { None } }).collect(); println!("{:?}", res); }

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

["a", "ab"]

Пример

Давайте используем map_while для парсинга чисел из строк. Если строка не является числом, возвращаем None и останавливаем итерацию:

fn main() { let vec = vec!["1", "2", "3", "abc", "4", "5"]; let iter = vec.iter(); let res: Vec<i32> = iter.map_while(|s| { s.parse::<i32>().ok() }).collect(); println!("{:?}", res); }

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

[1, 2, 3]

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

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