// Напиúите обобщенную функцию largest_by_key(list: &[T], key: F) -> Option<&T>, где: // ● F: Fn(&T) -> K, // ● K: PartialOrd. // Функция должна возвращать элемент с максимальным значением key(item). fn largest_by_key(list: &[T], key: impl Fn(&T) -> K) -> Option<&T> { let l_len = list.len(); if l_len < 1 { return None; } else if l_len == 1 { return Some(&list[0]); } let mut max = &list[0]; let mut max_key = key(max); for element in &list[1..] { let element_key = key(element); if element_key > max_key { (max, max_key) = (element, element_key); } } Some(max) } fn main() { // Пример из задания let words = ["apple", "banana", "cherry"]; let longest = largest_by_key(&words, |s| s.len()); println!("{:?}", longest); // Some("banana") // Дополнительные примеры let numbers = [1, 42, 3, 100, 5]; let largest_num = largest_by_key(&numbers, |&n| n); println!("{:?}", largest_num); // Some(100) struct Person { name: String, age: u32, } let people = [ Person { name: "Alice".to_string(), age: 30, }, Person { name: "Bob".to_string(), age: 25, }, Person { name: "Charlie".to_string(), age: 35, }, ]; let oldest = largest_by_key(&people, |p| p.age); println!("Oldest: {:?}", oldest.map(|p| &p.name)); // Some("Charlie") }