РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
565 of 1245 menu

Трейт PartialOrd

Трейт PartialOrd определяет частичный порядок для типа. Он позволяет сравнивать значения операторами <, >, <= и >=. Метод partial_cmp принимает второе значение того же типа и возвращает Option<Ordering>. Трейт PartialOrd является надтрейтом для PartialEq, поэтому тип должен также реализовывать сравнение на равенство.

Значения возвращаемого типа Ordering означают следующее: Less - первое значение меньше второго, Equal - значения равны, Greater - первое значение больше второго. Метод возвращает None, если значения несравнимы, например, когда одно из них NaN.

Синтаксис

trait PartialOrd<Rhs = Self>: PartialEq<Rhs> { fn partial_cmp(&self, other: &Rhs) -> Option<Ordering>; }

Основной метод трейта имеет такой синтаксис:

value.partial_cmp(&other)

Пример

Давайте сравним два числа с помощью метода partial_cmp:

use std::cmp::Ordering; fn main() { let a = 5; let b = 10; let res = a.partial_cmp(&b); match res { Some(Ordering::Less) => println!("a < b"), Some(Ordering::Equal) => println!("a == b"), Some(Ordering::Greater) => println!("a > b"), None => println!("not comparable"), } }

Результат выполнения кода:

"a < b"

Пример

Операторы сравнения работают автоматически для типов, реализующих трейт PartialOrd. Давайте сравним две строки:

fn main() { let a = "abcde"; let b = "12345"; let res = a > b; println!("{}", res); }

Результат выполнения кода:

true

Пример

Давайте сравним два значения f64, одно из которых равно NaN. Такое сравнение вернёт None:

fn main() { let a = f64::NAN; let b = 1.0; let res = a.partial_cmp(&b); println!("{:?}", res); }

Результат выполнения кода:

None

Пример

Давайте реализуем трейт PartialOrd для своей структуры и сравним два её экземпляра:

use std::cmp::Ordering; #[derive(PartialEq)] struct Point { x: i32, } impl PartialOrd for Point { fn partial_cmp(&self, other: &Self) -> Option<Ordering> { self.x.partial_cmp(&other.x) } } fn main() { let a = Point { x: 3 }; let b = Point { x: 7 }; let res = a < b; println!("{}", res); }

Результат выполнения кода:

true

Смотрите также

  • трейт PartialEq,
    который определяет сравнение на равенство
  • трейт Ord,
    который задаёт полный порядок значений
  • трейт Eq,
    который отмечает тип с полным равенством
  • трейт trait-bound,
    который ограничивает обобщённые типы трейтами
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить