Трейт scala.math.Ordering
@implicitNotFound(msg = "Нет неявного Ordering для ${T}.")
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 |
|---|---|
| Надтипы | |
| Известные подтипы |
62 типа |
| Тип самого себя |
|---|
Классы-литералы
Исходный код
class OrderingOps(lhs: T)
Этот внутренний класс определяет операторы сравнения, доступные для T.
Он не может расширять AnyVal, потому что это не класс верхнего уровня или член статически доступного объекта.
Исходный код
class OrderingOps(lhs: T)
Этот внутренний класс определяет операторы сравнения, доступные для T.
Он не может расширять AnyVal, потому что это не класс верхнего уровня или член статически доступного объекта.
Исходный код
class OrderingOps(lhs: T)
Этот внутренний класс определяет операторы сравнения, доступные для T.
Он не может расширять AnyVal потому, что это не класс верхнего уровня или член статически доступного объекта.
Абстрактные методы
Исходный код
Возвращает целое число, знак которого указывает, как x сравнивается с y.
Знак результата имеет следующее значение:
- отрицательный, если x < y - положительный, если x > y - нулевой в противном случае (если x == y)
Исходный код
Возвращает целое число, знак которого указывает, как x сравнивается с y.
Знак результата имеет следующее значение:
- отрицательный, если x < y - положительный, если x > y - нулевой в противном случае (если x == y)
Исходный код
Возвращает целое число, знак которого указывает, как x сравнивается с y.
Знак результата имеет следующее значение:
- отрицательный, если x < y - положительный, если x > y - нулевой в противном случае (если x == y)
Конкретные методы
Исходный код
Возвращает true, если x равно y в порядке сортировки.
| Классы определений | PartialOrdering -> Equiv |
|---|
Исходный код
Возвращает true, если x > y в порядке сортировки.
| Классы определений | PartialOrdering |
|---|
Исходный код
Возвращает true, если x >= y в порядке сортировки.
| Классы определений | PartialOrdering |
|---|
Исходный код
Возвращает, является ли другой порядок обратным порядком этого.
Эквивалентно other == this.reverse.
Реализации должны переопределять этот метод только в том случае, если они переопределяют reverse также.
Source
Возвращает true, если порядок другого порядка является обратным порядком этого.
Эквивалентно other == this.reverse.
Реализации должны переопределять этот метод только в том случае, если они также переопределяют reverse.
Source
Возвращает true, если порядок другого порядка является обратным порядком этого.
Эквивалентно other == this.reverse.
Реализации должны переопределять этот метод только в том случае, если они также переопределяют reverse также.
Source
Возвращает true, если x < y в порядке.
| Definition Classes | PartialOrdering |
|---|
Source
Возвращает true, если x <= y в порядке.
| Definition Classes | PartialOrdering |
|---|
Source
def max[U <: T](x: U, y: U): U
Возвращает x если x >= y, в противном случае y.
Source
def max[U <: T](x: U, y: U): U
Возвращает 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
Возвращает x если x <= y, в противном случае y.
Source
def min[U <: T](x: U, y: U): U
Возвращает x если x <= y, в противном случае y.
Source
def min[U <: T](x: U, y: U): U
Возвращает x если x <= y, в противном случае y.
Source
Учитывая f, функцию из U в T, создает Ordering[U], чья функция сравнения эквивалентна:
def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))
Source
При заданной функции f из U в T создаёт Ordering[U], функция сравнения которого эквивалентна:
def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))
Источник
При заданной функции f из U в T создаёт Ordering[U], функция сравнения которого эквивалентна:
def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))
Источник
Создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат функции сравнения other.
| Параметры значения |
|
|---|---|
| Пример |
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
.orElse(Ordering.by[Pair, Int](_.b))
|
Источник
Создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат функции сравнения other.
| Параметры значения |
|
|---|---|
| Пример |
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
.orElse(Ordering.by[Pair, Int](_.b))
|
Источник
Создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат функции сравнения other.
| Параметры значения |
|
|---|---|
| Пример |
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
.orElse(Ordering.by[Pair, Int](_.b))
|
Источник
При заданной функции 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)
|
|---|
Источник
При заданной функции 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)
|
|---|
Источник
При заданной функции 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)
|
|---|
Источник
Возвращает обратный порядок этого.
Реализации, переопределяющие этот метод, ОБЯЗАНЫ также переопределить isReverseOf, если они изменяют поведение каким-либо образом (например, кеширование не требует его переопределения).
| Классы-определения | PartialOrdering |
|---|
Исходный код
Возвращает, определено ли сравнение между x и y, и если да, то результат compare(x, y).
Исходный код
Возвращает, определено ли сравнение между x и y, и если да, то результат compare(x, y).
Исходный код
Возвращает, определено ли сравнение между x и y, и если да, то результат compare(x, y).
Наследованные методы
def reversed(): Comparator[T]
| Наследуется из | Comparator |
|---|
def reversed(): Comparator[T]
| Наследуется из | Comparator |
|---|
def reversed(): Comparator[T]
| Наследуется из | 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 |
|---|
| Наследуется из | 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 |
|---|
| Унаследовано от | 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 |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
| Унаследовано от | Comparator |
|---|
Неявные
Источник
implicit def mkOrderingOps(lhs: T): OrderingOps
Этот неявный метод дополняет T операторами сравнения, определёнными в scala.math.Ordering.Ops.
Источник
implicit def mkOrderingOps(lhs: T): OrderingOps
Этот неявный метод дополняет 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