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

Функция max_by

Функция max_by возвращает максимальный элемент итератора, используя для сравнения заданную функцию-компаратор. Параметром функция принимает замыкание, которое получает два элемента и возвращает значение типа Ordering: Less, Equal или Greater. Функция возвращает None, если итератор пуст, и Some с максимальным элементом в противном случае.

Синтаксис

iter.max_by(|a, b| a.cmp(b))

Пример

Давайте найдём максимальный элемент вектора [1, 2, 3, 4, 5], сравнивая элементы напрямую через cmp:

use std::cmp::Ordering; fn main() { let vec = vec![1, 2, 3, 4, 5]; let res = vec.iter().max_by(|a, b| a.cmp(b)); println!("{:?}", res); }

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

Some(5)

Пример

Давайте найдём элемент с максимальной длиной строки в векторе ["a", "abc", "ab"], используя собственную функцию сравнения:

use std::cmp::Ordering; fn main() { let vec = vec!["a", "abc", "ab"]; let res = vec.iter().max_by(|a, b| { a.len().cmp(&b.len()) }); println!("{:?}", res); }

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

Some("abc")

Пример

Давайте найдём максимальный элемент по модулю в векторе [-5, 3, -10, 7], сравнивая абсолютные значения:

use std::cmp::Ordering; fn main() { let vec = vec![-5, 3, -10, 7]; let res = vec.iter().max_by(|a, b| { a.abs().cmp(&b.abs()) }); println!("{:?}", res); }

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

Some(-10)

Пример

Давайте проверим поведение функции на пустом векторе:

use std::cmp::Ordering; fn main() { let vec: Vec<i32> = vec![]; let res = vec.iter().max_by(|a, b| a.cmp(b)); println!("{:?}", res); }

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

None

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

  • функция max,
    которая возвращает максимальный элемент итератора
  • функция min_by,
    которая возвращает минимальный элемент по критерию
  • функция max_by_key,
    которая возвращает максимальный элемент по ключу
  • тип Ordering,
    который представляет результат сравнения двух значений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить