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

Метод find_map

Метод find_map применяет заданную функцию к каждому элементу итератора и возвращает первый результат, который не является None. Если ни один элемент не дал значения Some, метод возвращает None. Параметром метод принимает замыкание, которое получает элемент итератора и возвращает значение типа Option.

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

Синтаксис

iter.find_map(f)

Пример

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

fn main() { let vec = vec![1, 3, 4, 5, 6]; let res = vec.iter().find_map(|x| { if x % 2 == 0 { Some(x.to_string()) } else { None } }); println!("{:?}", res); }

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

Some("4")

Пример

Давайте попробуем найти элемент, для которого условие никогда не выполняется:

fn main() { let vec = vec![1, 3, 5, 7]; let res = vec.iter().find_map(|x| { if x % 2 == 0 { Some(x * 10) } else { None } }); println!("{:?}", res); }

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

None

Пример

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

fn main() { let vec = vec!["a", "b", "123", "d"]; let res = vec.iter().find_map(|s| s.parse::<i32>().ok()); println!("{:?}", res); }

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

Some(123)

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

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