Iterators have min and max methods that allow us to fetch the minimum and maximum values from any data that can be converted into an iterator. For example a vector.
At compile time we usually cannot know if the vector, in which we are looking for the minimum (or maximum) value has any elements.
If it is empty then calling min or max will return None wrapped in an Option. We can either check the return value using
match or we can prevent the call by checking the len of the vector.
examples/min-max-vector/src/main.rs
fn main() {
let numbers: Vec<i32> = vec![23, 10, 78, 30];
println!("numbers: {:?}", numbers);
let min = numbers.iter().min().unwrap();
println!("min: {}", min);
let max = numbers.iter().max().unwrap();
println!("max: {}", max);
let other: Vec<i32> = vec![23];
let empty: Vec<i32> = vec![];
println!();
for vec in vec![numbers, empty, other] {
if vec.len() > 0 {
let min = vec.iter().min().unwrap();
println!("min: {}", min);
} else {
println!("empty");
}
}
}
numbers: [23, 10, 78, 30]
min: 10
max: 78
min: 10
empty
min: 23