Метод min_by_key
Метод min_by_key возвращает минимальный элемент итератора,
сравнивая элементы не напрямую, а по ключу, который вычисляется
с помощью переданной функции. Параметром метод принимает функцию,
которая получает ссылку на элемент и возвращает значение ключа,
по которому будет производиться сравнение.
Метод возвращает Option: Some с минимальным
элементом, если итератор не пуст, и None в противном случае.
Если несколько элементов имеют одинаковый минимальный ключ, метод
вернёт первый из них.
Синтаксис
iter.min_by_key(|item| key)
Пример
Давайте найдём строку с наименьшей длиной в векторе строк:
fn main()
{
let vec = vec!["abcde", "ab", "abc", "a"];
let res = vec.iter().min_by_key(|s| s.len());
println!("{:?}", res);
}
Результат выполнения кода:
Some("a")
Пример
Давайте найдём число с минимальным квадратом в векторе чисел:
fn main()
{
let vec = vec![3, -5, 2, -1, 4];
let res = vec.iter().min_by_key(|x| x * x);
println!("{:?}", res);
}
Результат выполнения кода:
Some(-1)
Пример
Давайте найдём кортеж с минимальным вторым элементом:
fn main()
{
let vec = vec![(1, 5), (2, 3), (3, 8), (4, 1)];
let res = vec.iter().min_by_key(|t| t.1);
println!("{:?}", res);
}
Результат выполнения кода:
Some((4, 1))
Пример
Давайте проверим, что возвращает метод на пустом итераторе:
fn main()
{
let vec: Vec<i32> = vec![];
let res = vec.iter().min_by_key(|x| *x);
println!("{:?}", res);
}
Результат выполнения кода:
None
Смотрите также
-
метод
min,
который находит минимальный элемент итератора -
метод
max_by_key,
который находит максимальный элемент по ключу -
метод
min_by,
который находит минимальный элемент с помощью функции сравнения -
метод
max,
который находит максимальный элемент итератора