quizzes
This commit is contained in:
@@ -1,12 +1,25 @@
|
||||
// Напиúите обобûённуĀ функøиĀ largest_by_key<T, F, K>(list: &[T], key: F) -> Option<&T>, где:
|
||||
// Напиúите обобщенную функцию largest_by_key<T, F, K>(list: &[T], key: F) -> Option<&T>, где:
|
||||
// ● F: Fn(&T) -> K,
|
||||
// ● K: PartialOrd.
|
||||
// Функøиā должна возвраûатþ ÿлемент с максималþнýм знаùением key(item).
|
||||
|
||||
//fn largest_by_key
|
||||
|
||||
|
||||
// Функция должна возвращать элемент с максимальным значением key(item).
|
||||
|
||||
fn largest_by_key<T, K: PartialOrd>(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() {
|
||||
// Пример из задания
|
||||
@@ -19,11 +32,23 @@ fn main() {
|
||||
let largest_num = largest_by_key(&numbers, |&n| n);
|
||||
println!("{:?}", largest_num); // Some(100)
|
||||
|
||||
struct Person { name: String, age: u32 }
|
||||
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 },
|
||||
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")
|
||||
|
||||
Reference in New Issue
Block a user