Spec-Zone.ru › Scala 3.1

Трейт scala.math.Ordering

Объект-компаньон • Исходный код

@implicitNotFound(msg = "Нет неявного Ordering для ${T}.")
трейт Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable

Ordering — это трейт, экземпляры которого представляют стратегию сортировки экземпляров типа.

Объект-компаньон Ordering определяет множество неявных объектов для работы с подтипами AnyVal (например, Int, Double), String, и другими.

Для сортировки экземпляров по одному или нескольким переменным членам можно воспользоваться этими встроенными упорядочениями с помощью Ordering.by и Ordering.on:

import scala.util.Sorting
val pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3))

// sort by 2nd element
Sorting.quickSort(pairs)(Ordering.by[(String, Int, Int), Int](_._2))

// sort by the 3rd element, then 1st
Sorting.quickSort(pairs)(Ordering[(Int, String)].on(x => (x._3, x._1)))

Реализация Ordering[T] выполняется путём задания метода compare, compare(a: T, b: T): Int, который определяет, как упорядочить два экземпляра a и b. Экземпляры Ordering[T] могут использоваться такими структурами, как scala.util.Sorting для сортировки коллекций, например, Array[T].

Например:

import scala.util.Sorting

case class Person(name:String, age:Int)
val people = Array(Person("bob", 30), Person("ann", 32), Person("carl", 19))

// sort by age
object AgeOrdering extends Ordering[Person] {
 def compare(a:Person, b:Person) = a.age.compare(b.age)
}
Sorting.quickSort(people)(AgeOrdering)

Этот трейт и scala.math.Ordered оба предоставляют ту же функциональность, но различными способами. Тип T может получить единственный способ упорядочения, расширив Ordered. Используя Ordering, этот же тип может быть отсортирован множеством других способов. Ordered и Ordering оба предоставляют неявные преобразования, позволяющие им использоваться взаимозаменяемо.

Вы можете import scala.math.Ordering.Implicits._ для получения доступа к другим неявным упорядочениям.

См. также

scala.math.Ordered, scala.util.Sorting, scala.math.Ordering.Implicits

Надтипы
трейт PartialOrdering[T]
трейт Equiv[T]
трейт Serializable
трейт Comparator[T]
класс Object
трейт Matchable
класс Any
Известные подтипы
62 типа
объект ValueOrdering.тип
объект DeadlineIsOrdered.тип
объект DurationIsOrdered.тип
объект FiniteDurationIsOrdered.тип
тракт Numeric[T]
тракт Fractional[T]
тракт BigDecimalIsFractional
объект BigDecimalIsFractional.тип
тракт DoubleIsFractional
объект DoubleIsFractional.тип
тракт FloatIsFractional
объект FloatIsFractional.тип
тракт Integral[T]
тракт BigDecimalAsIfIntegral
объект BigDecimalAsIfIntegral.тип
тракт BigIntIsIntegral
объект BigIntIsIntegral.тип
тракт ByteIsIntegral
объект ByteIsIntegral.тип
тракт CharIsIntegral
объект CharIsIntegral.тип
тракт IntIsIntegral
объект IntIsIntegral.тип
тракт LongIsIntegral
объект LongIsIntegral.тип
тракт ShortIsIntegral
объект ShortIsIntegral.тип
тракт BigDecimalIsConflicted
тракт BigDecimalOrdering
объект BigDecimal.тип
тракт BigIntOrdering
объект BigInt.тип
тракт BooleanOrdering
объект Boolean.тип
тракт ByteOrdering
объект Byte.тип
тракт CachedReverse[T]
объект Int.тип
тракт CharOrdering
объект Char.тип
тракт IeeeOrdering
объект IeeeOrdering.тип
тракт TotalOrdering
объект DeprecatedDoubleOrdering.тип
объект TotalOrdering.тип
тракт IeeeOrdering
объект IeeeOrdering.тип
тракт TotalOrdering
объект DeprecatedFloatOrdering.тип
объект TotalOrdering.тип
тракт IntOrdering
тракт LongOrdering
объект Long.тип
тракт OptionOrdering[T]
тракт ShortOrdering
объект Short.тип
тракт StringOrdering
объект String.тип
тракт SymbolOrdering
объект Symbol.тип
тракт UnitOrdering
object Unit.type
Тип самого себя
Ordering[T]

Классы-литералы

Исходный код
class OrderingOps(lhs: T)

Неявно добавлен Iterable

Этот внутренний класс определяет операторы сравнения, доступные для T.

Он не может расширять AnyVal, потому что это не класс верхнего уровня или член статически доступного объекта.

Исходный код
class OrderingOps(lhs: T)

Неявно добавлен Option

Этот внутренний класс определяет операторы сравнения, доступные для T.

Он не может расширять AnyVal, потому что это не класс верхнего уровня или член статически доступного объекта.

Исходный код
class OrderingOps(lhs: T)

Этот внутренний класс определяет операторы сравнения, доступные для T.

Он не может расширять AnyVal потому, что это не класс верхнего уровня или член статически доступного объекта.

Абстрактные методы

Исходный код
def compare(x: T, y: T): Int

Неявно добавлен Iterable

Возвращает целое число, знак которого указывает, как x сравнивается с y.

Знак результата имеет следующее значение:

- отрицательный, если x < y - положительный, если x > y - нулевой в противном случае (если x == y)

Исходный код
def compare(x: T, y: T): Int

Неявно добавлен Option

Возвращает целое число, знак которого указывает, как x сравнивается с y.

Знак результата имеет следующее значение:

- отрицательный, если x < y - положительный, если x > y - нулевой в противном случае (если x == y)

Исходный код
def compare(x: T, y: T): Int

Возвращает целое число, знак которого указывает, как x сравнивается с y.

Знак результата имеет следующее значение:

- отрицательный, если x < y - положительный, если x > y - нулевой в противном случае (если x == y)

Конкретные методы

Исходный код
override def equiv(x: T, y: T): Boolean

Возвращает true, если x равно y в порядке сортировки.

Классы определений PartialOrdering -> Equiv

Исходный код
override def gt(x: T, y: T): Boolean

Возвращает true, если x > y в порядке сортировки.

Классы определений PartialOrdering

Исходный код
override def gteq(x: T, y: T): Boolean

Возвращает true, если x >= y в порядке сортировки.

Классы определений PartialOrdering

Исходный код
def isReverseOf(other: Ordering[_]): Boolean

Неявно добавлен Iterable

Возвращает, является ли другой порядок обратным порядком этого.

Эквивалентно other == this.reverse.

Реализации должны переопределять этот метод только в том случае, если они переопределяют reverse также.

Source
def isReverseOf(other: Ordering[_]): Boolean

Implicitly added by Option

Возвращает true, если порядок другого порядка является обратным порядком этого.

Эквивалентно other == this.reverse.

Реализации должны переопределять этот метод только в том случае, если они также переопределяют reverse.

Source
def isReverseOf(other: Ordering[_]): Boolean

Возвращает true, если порядок другого порядка является обратным порядком этого.

Эквивалентно other == this.reverse.

Реализации должны переопределять этот метод только в том случае, если они также переопределяют reverse также.

Source
override def lt(x: T, y: T): Boolean

Возвращает true, если x < y в порядке.

Definition Classes PartialOrdering

Source
override def lteq(x: T, y: T): Boolean

Возвращает true, если x <= y в порядке.

Definition Classes PartialOrdering

Source
def max[U <: T](x: U, y: U): U

Implicitly added by Iterable

Возвращает x если x >= y, в противном случае y.

Source
def max[U <: T](x: U, y: U): U

Implicitly added by Option

Возвращает x если x >= y, в противном случае y.

Source
def max[U <: T](x: U, y: U): U

Возвращает x если x >= y, в противном случае y.

Source
def min[U <: T](x: U, y: U): U

Implicitly added by Iterable

Возвращает x если x <= y, в противном случае y.

Source
def min[U <: T](x: U, y: U): U

Implicitly added by Option

Возвращает x если x <= y, в противном случае y.

Source
def min[U <: T](x: U, y: U): U

Возвращает x если x <= y, в противном случае y.

Source
def on[U](f: U => T): Ordering[U]

Implicitly added by Iterable

Учитывая f, функцию из U в T, создает Ordering[U], чья функция сравнения эквивалентна:

def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))

Source
def on[U](f: U => T): Ordering[U]

Implicitly added by Option

При заданной функции f из U в T создаёт Ordering[U], функция сравнения которого эквивалентна:

def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))

Источник
def on[U](f: U => T): Ordering[U]

При заданной функции f из U в T создаёт Ordering[U], функция сравнения которого эквивалентна:

def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))

Источник
def orElse(other: Ordering[T]): Ordering[T]

Неявно добавлено Iterable

Создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат функции сравнения other.

Параметры значения
other

Ordering, который используется, если этот Ordering возвращает ноль

Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElse(Ordering.by[Pair, Int](_.b))

Источник
def orElse(other: Ordering[T]): Ordering[T]

Неявно добавлено Option

Создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат функции сравнения other.

Параметры значения
other

Ordering, который используется, если этот Ordering возвращает ноль

Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElse(Ordering.by[Pair, Int](_.b))

Источник
def orElse(other: Ordering[T]): Ordering[T]

Создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат функции сравнения other.

Параметры значения
other

Ordering, который используется, если этот Ordering возвращает ноль

Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElse(Ordering.by[Pair, Int](_.b))

Источник
def orElseBy[S](f: T => S)(implicit ord: Ordering[S]): Ordering[T]

Неявно добавлено Iterable

При заданной функции f из T в S создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат, эквивалентный:

Ordering[S].compare(f(x), f(y))

Эта функция эквивалентна передаче результата Ordering.by(f) в orElse.

Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElseBy[Int](_.b)

Источник
def orElseBy[S](f: T => S)(implicit ord: Ordering[S]): Ordering[T]

Неявно добавлено Option

При заданной функции f из T в S создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат, эквивалентный:

Ordering[S].compare(f(x), f(y))

Эта функция эквивалентна передаче результата Ordering.by(f) в orElse.

Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElseBy[Int](_.b)

Источник
def orElseBy[S](f: T => S)(implicit ord: Ordering[S]): Ordering[T]

При заданной функции f из T в S создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат, эквивалентный:

Ordering[S].compare(f(x), f(y))

Эта функция эквивалентна передаче результата Ordering.by(f) в orElse.

Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElseBy[Int](_.b)

Источник
override def reverse: Ordering[T]

Возвращает обратный порядок этого.

Реализации, переопределяющие этот метод, ОБЯЗАНЫ также переопределить isReverseOf, если они изменяют поведение каким-либо образом (например, кеширование не требует его переопределения).

Классы-определения PartialOrdering

Исходный код
def tryCompare(x: T, y: T): Option[Int]

Неявное добавление Iterable

Возвращает, определено ли сравнение между x и y, и если да, то результат compare(x, y).

Исходный код
def tryCompare(x: T, y: T): Option[Int]

Неявное добавление Option

Возвращает, определено ли сравнение между x и y, и если да, то результат compare(x, y).

Исходный код
def tryCompare(x: T, y: T): Option[Int]

Возвращает, определено ли сравнение между x и y, и если да, то результат compare(x, y).

Наследованные методы

def reversed(): Comparator[T]

Неявное добавление Iterable
Наследуется из Comparator

def reversed(): Comparator[T]

Неявное добавление Option
Наследуется из Comparator

def reversed(): Comparator[T]

Наследуется из Comparator

def thenComparing[U <: Comparable[_ >: U <: <FromJavaObject>]](x$0: Function[_ >: T <: <FromJavaObject>, _ <: U]): Comparator[T]

Неявное добавление Iterable
Наследуется из Comparator

def thenComparing[U <: <FromJavaObject>](x$0: Function[_ >: T <: <FromJavaObject>, _ <: U], x$1: Comparator[_ >: U <: <FromJavaObject>]): Comparator[T]

Неявное добавление Iterable
Наследуется из Comparator

def thenComparing(x$0: Comparator[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявное добавление Iterable
Наследуется из Comparator

def thenComparing[U <: Comparable[_ >: U <: <FromJavaObject>]](x$0: Function[_ >: T <: <FromJavaObject>, _ <: U]): Comparator[T]

Неявно добавлено Option
Унаследовано от Comparator

def thenComparing[U <: <FromJavaObject>](x$0: Function[_ >: T <: <FromJavaObject>, _ <: U], x$1: Comparator[_ >: U <: <FromJavaObject>]): Comparator[T]

Неявно добавлено Option
Унаследовано от Comparator

def thenComparing(x$0: Comparator[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявно добавлено Option
Унаследовано от Comparator

def thenComparing[U <: Comparable[_ >: U <: <FromJavaObject>]](x$0: Function[_ >: T <: <FromJavaObject>, _ <: U]): Comparator[T]

Унаследовано от Comparator

def thenComparing[U <: <FromJavaObject>](x$0: Function[_ >: T <: <FromJavaObject>, _ <: U], x$1: Comparator[_ >: U <: <FromJavaObject>]): Comparator[T]

Унаследовано от Comparator

def thenComparing(x$0: Comparator[_ >: T <: <FromJavaObject>]): Comparator[T]

Унаследовано от Comparator

def thenComparingDouble(x$0: ToDoubleFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявно добавлено Iterable
Унаследовано от Comparator

def thenComparingDouble(x$0: ToDoubleFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявно добавлено по Option
Унаследовано от Comparator

def thenComparingDouble(x$0: ToDoubleFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Унаследовано от Comparator

def thenComparingInt(x$0: ToIntFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявно добавлено по Iterable
Унаследовано от Comparator

def thenComparingInt(x$0: ToIntFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявно добавлено по Option
Унаследовано от Comparator

def thenComparingInt(x$0: ToIntFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Унаследовано от Comparator

def thenComparingLong(x$0: ToLongFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявно добавлено по Iterable
Унаследовано от Comparator

def thenComparingLong(x$0: ToLongFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Неявно добавлено по Option
Унаследовано от Comparator

def thenComparingLong(x$0: ToLongFunction[_ >: T <: <FromJavaObject>]): Comparator[T]

Унаследовано от Comparator

Неявные

Источник
implicit def mkOrderingOps(lhs: T): OrderingOps

Неявно добавлено по Iterable

Этот неявный метод дополняет T операторами сравнения, определёнными в scala.math.Ordering.Ops.

Источник
implicit def mkOrderingOps(lhs: T): OrderingOps

Неявно добавлен Option

Этот неявный метод дополняет T операторами сравнения, определёнными в scala.math.Ordering.Ops.

Исходный код
implicit def mkOrderingOps(lhs: T): OrderingOps

Этот неявный метод дополняет T операторами сравнения, определёнными в scala.math.Ordering.Ops.

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/math/Ordering.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API