fn find_largest_and_smallest_words(text: &str) -> (Option<&str>, Option<&str>) {
text.split_whitespace().fold((None, None), |(smallest, largest), word| {
(
smallest.map_or(Some(word), |s| if word.len() < s.len() { Some(word) } else { Some(s) }),
largest.map_or(Some(word), |l| if word.len() > l.len() { Some(word) } else { Some(l) }),
)
})
}
fn main() {
let s = "Rust is memory-efficient with no runtime or garbage collector";
let (smallest, largest) = find_largest_and_smallest_words(s);
println!("Smallest: {:?}", smallest);
println!("Largest: {:?}", largest);
println!("Smallest: {}", smallest.as_deref().unwrap_or("none string"));
println!("Largest: {}", largest.as_deref().unwrap_or("none string"));
}
/*
run:
Smallest: Some("is")
Largest: Some("memory-efficient")
Smallest: is
Largest: memory-efficient
*/