Trait core::iter::IteratorOrdExtUnstable
[-]
[+]
[src]
pub trait IteratorOrdExt<A> { fn max(self) -> Option<A>; fn min(self) -> Option<A>; fn min_max(self) -> MinMaxResult<A>; }
A trait for iterators over elements which can be compared to one another.
Required Methods
fn max(self) -> Option<A>
Consumes the entire iterator to return the maximum element.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; assert!(a.iter().max().unwrap() == &5); }let a = [1i, 2, 3, 4, 5]; assert!(a.iter().max().unwrap() == &5);
fn min(self) -> Option<A>
Consumes the entire iterator to return the minimum element.
Example
fn main() { let a = [1i, 2, 3, 4, 5]; assert!(a.iter().min().unwrap() == &1); }let a = [1i, 2, 3, 4, 5]; assert!(a.iter().min().unwrap() == &1);
fn min_max(self) -> MinMaxResult<A>
min_max
finds the minimum and maximum elements in the iterator.
The return type MinMaxResult
is an enum of three variants:
NoElements
if the iterator is empty.OneElement(x)
if the iterator has exactly one element.MinMax(x, y)
is returned otherwise, wherex <= y
. Two values are equal if and only if there is more than one element in the iterator and all elements are equal.
On an iterator of length n
, min_max
does 1.5 * n
comparisons,
and so is faster than calling min
and max
separately which does 2 * n
comparisons.
Example
fn main() { use std::iter::{NoElements, OneElement, MinMax}; let v: [int, ..0] = []; assert_eq!(v.iter().min_max(), NoElements); let v = [1i]; assert!(v.iter().min_max() == OneElement(&1)); let v = [1i, 2, 3, 4, 5]; assert!(v.iter().min_max() == MinMax(&1, &5)); let v = [1i, 2, 3, 4, 5, 6]; assert!(v.iter().min_max() == MinMax(&1, &6)); let v = [1i, 1, 1, 1]; assert!(v.iter().min_max() == MinMax(&1, &1)); }use std::iter::{NoElements, OneElement, MinMax}; let v: [int, ..0] = []; assert_eq!(v.iter().min_max(), NoElements); let v = [1i]; assert!(v.iter().min_max() == OneElement(&1)); let v = [1i, 2, 3, 4, 5]; assert!(v.iter().min_max() == MinMax(&1, &5)); let v = [1i, 2, 3, 4, 5, 6]; assert!(v.iter().min_max() == MinMax(&1, &6)); let v = [1i, 1, 1, 1]; assert!(v.iter().min_max() == MinMax(&1, &1));
Implementors
impl<A: Ord, T: Iterator<A>> IteratorOrdExt<A> for T