Enum Ordering

#[repr(i8)]
pub enum Ordering

An Ordering is the result of a comparison between two values.

Examples

use std::cmp::Ordering;

assert_eq!(1.cmp(&2), Ordering::Less);

assert_eq!(1.cmp(&1), Ordering::Equal);

assert_eq!(2.cmp(&1), Ordering::Greater);

Variants

Less = -1

An ordering where a compared value is less than another.

Equal = 0

An ordering where a compared value is equal to another.

Greater = 1

An ordering where a compared value is greater than another.

Implementations

impl Ordering

const fn as_raw(self) -> i8
const fn is_eq(self) -> bool

Returns true if the ordering is the Equal variant.

Examples

use std::cmp::Ordering;

assert_eq!(Ordering::Less.is_eq(), false);
assert_eq!(Ordering::Equal.is_eq(), true);
assert_eq!(Ordering::Greater.is_eq(), false);
const fn is_ne(self) -> bool

Returns true if the ordering is not the Equal variant.

Examples

use std::cmp::Ordering;

assert_eq!(Ordering::Less.is_ne(), true);
assert_eq!(Ordering::Equal.is_ne(), false);
assert_eq!(Ordering::Greater.is_ne(), true);
const fn is_lt(self) -> bool

Returns true if the ordering is the Less variant.

Examples

use std::cmp::Ordering;

assert_eq!(Ordering::Less.is_lt(), true);
assert_eq!(Ordering::Equal.is_lt(), false);
assert_eq!(Ordering::Greater.is_lt(), false);
const fn is_gt(self) -> bool

Returns true if the ordering is the Greater variant.

Examples

use std::cmp::Ordering;

assert_eq!(Ordering::Less.is_gt(), false);
assert_eq!(Ordering::Equal.is_gt(), false);
assert_eq!(Ordering::Greater.is_gt(), true);
const fn is_le(self) -> bool

Returns true if the ordering is either the Less or Equal variant.

Examples

use std::cmp::Ordering;

assert_eq!(Ordering::Less.is_le(), true);
assert_eq!(Ordering::Equal.is_le(), true);
assert_eq!(Ordering::Greater.is_le(), false);
const fn is_ge(self) -> bool

Returns true if the ordering is either the Greater or Equal variant.

Examples

use std::cmp::Ordering;

assert_eq!(Ordering::Less.is_ge(), false);
assert_eq!(Ordering::Equal.is_ge(), true);
assert_eq!(Ordering::Greater.is_ge(), true);
const fn reverse(self) -> Ordering

Reverses the Ordering.

  • Less becomes Greater.
  • Greater becomes Less.
  • Equal becomes Equal.

Examples

Basic behavior:

use std::cmp::Ordering;

assert_eq!(Ordering::Less.reverse(), Ordering::Greater);
assert_eq!(Ordering::Equal.reverse(), Ordering::Equal);
assert_eq!(Ordering::Greater.reverse(), Ordering::Less);

This method can be used to reverse a comparison:

let data: &mut [_] = &mut [2, 10, 5, 8];

// sort the array from largest to smallest.
data.sort_by(|a, b| a.cmp(b).reverse());

let b: &mut [_] = &mut [10, 8, 5, 2];
assert!(data == b);
const fn then(self, other: Ordering) -> Ordering

Chains two orderings.

Returns self when it's not Equal. Otherwise returns other.

Examples

use std::cmp::Ordering;

let result = Ordering::Equal.then(Ordering::Less);
assert_eq!(result, Ordering::Less);

let result = Ordering::Less.then(Ordering::Equal);
assert_eq!(result, Ordering::Less);

let result = Ordering::Less.then(Ordering::Greater);
assert_eq!(result, Ordering::Less);

let result = Ordering::Equal.then(Ordering::Equal);
assert_eq!(result, Ordering::Equal);

let x: (i64, i64, i64) = (1, 2, 7);
let y: (i64, i64, i64) = (1, 5, 3);
let result = x.0.cmp(&y.0).then(x.1.cmp(&y.1)).then(x.2.cmp(&y.2));

assert_eq!(result, Ordering::Less);
const fn then_with<F>(self, f: F) -> Ordering
where
    F: ~const FnOnce() -> Ordering,

Chains the ordering with the given function.

Returns self when it's not Equal. Otherwise calls f and returns the result.

Examples

use std::cmp::Ordering;

let result = Ordering::Equal.then_with(|| Ordering::Less);
assert_eq!(result, Ordering::Less);

let result = Ordering::Less.then_with(|| Ordering::Equal);
assert_eq!(result, Ordering::Less);

let result = Ordering::Less.then_with(|| Ordering::Greater);
assert_eq!(result, Ordering::Less);

let result = Ordering::Equal.then_with(|| Ordering::Equal);
assert_eq!(result, Ordering::Equal);

let x: (i64, i64, i64) = (1, 2, 7);
let y: (i64, i64, i64) = (1, 5, 3);
let result = x.0.cmp(&y.0).then_with(|| x.1.cmp(&y.1)).then_with(|| x.2.cmp(&y.2));

assert_eq!(result, Ordering::Less);

Trait Implementations

impl BytewiseEq for Ordering

impl Clone for Ordering

fn clone(&self) -> Ordering

impl Copy for Ordering

impl Debug for Ordering

fn fmt(&self, f: &mut Formatter<'_>) -> Result

impl Eq for Ordering

fn assert_fields_are_eq(&self)

impl Hash for Ordering

fn hash<__H: Hasher>(&self, state: &mut __H)

impl Ord for Ordering

fn cmp(&self, other: &Ordering) -> Ordering

impl PartialEq for Ordering

fn eq(&self, other: &Ordering) -> bool

impl PartialOrd for Ordering

fn partial_cmp(&self, other: &Ordering) -> Option<Ordering>

impl StructuralPartialEq for Ordering

impl TrivialClone for Ordering

Auto Trait Implementations

impl Freeze for Ordering

impl RefUnwindSafe for Ordering

impl Send for Ordering

impl Sync for Ordering

impl Unpin for Ordering

impl UnsafeUnpin for Ordering

impl UnwindSafe for Ordering

Blanket Implementations

impl<T> Any for Ordering where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Ordering where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Ordering where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> CloneToUninit for Ordering where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for Ordering

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> Printable for Ordering where T: Copy + Debug,

impl<T> SizeHint for Ordering where T: ?Sized,

fn lower_bound(&self) -> usize
fn upper_bound(&self) -> Option<usize>

impl<T> SizedTypeProperties for Ordering

impl<T, U> Into<U> for Ordering where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for Ordering where U: Into<T>,

type Error = Infallible;
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto<U> for Ordering where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>