Ordering is a trait whose instances each represent a strategy for sorting instances of a type.
Ordering's companion object defines many implicit objects to deal with
subtypes of AnyVal (e.g. Int
, Double
), String
, and others.
To sort instances by one or more member variables, you can take advantage of these built-in orderings using Ordering.by and 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)))
An Ordering[T]
is implemented by specifying the compare method,
compare(a: T, b: T): Int
, which decides how to order two instances
a
and b
. Instances of Ordering[T]
can be used by things like
scala.util.Sorting
to sort collections like Array[T]
.
For example:
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)
This trait and scala.math.Ordered both provide this same functionality, but
in different ways. A type T
can be given a single way to order itself by
extending Ordered
. Using Ordering
, this same type may be sorted in many
other ways. Ordered
and Ordering
both provide implicits allowing them to be
used interchangeably.
You can import scala.math.Ordering.Implicits._
to gain access to other
implicit orderings.
- See also:
- Companion:
- object
- Source:
- Ordering.scala
Type members
Classlikes
This inner class defines comparison operators available for T
.
This inner class defines comparison operators available for T
.
It can't extend AnyVal
because it is not a top-level class
or a member of a statically accessible object.
- Source:
- Ordering.scala
This inner class defines comparison operators available for T
.
This inner class defines comparison operators available for T
.
It can't extend AnyVal
because it is not a top-level class
or a member of a statically accessible object.
- Source:
- Ordering.scala
This inner class defines comparison operators available for T
.
This inner class defines comparison operators available for T
.
It can't extend AnyVal
because it is not a top-level class
or a member of a statically accessible object.
- Source:
- Ordering.scala
Value members
Abstract methods
Returns an integer whose sign communicates how x compares to y.
Returns an integer whose sign communicates how x compares to y.
The result sign has the following meaning:
- negative if x < y - positive if x > y - zero otherwise (if x == y)
- Source:
- Ordering.scala
Returns an integer whose sign communicates how x compares to y.
Returns an integer whose sign communicates how x compares to y.
The result sign has the following meaning:
- negative if x < y - positive if x > y - zero otherwise (if x == y)
- Source:
- Ordering.scala
Returns an integer whose sign communicates how x compares to y.
Returns an integer whose sign communicates how x compares to y.
The result sign has the following meaning:
- negative if x < y - positive if x > y - zero otherwise (if x == y)
- Source:
- Ordering.scala
Concrete methods
Return true if x
== y
in the ordering.
Return true if x
== y
in the ordering.
- Definition Classes
- Source:
- Ordering.scala
Return true if x
> y
in the ordering.
Return true if x
> y
in the ordering.
- Definition Classes
- Source:
- Ordering.scala
Return true if x
>= y
in the ordering.
Return true if x
>= y
in the ordering.
- Definition Classes
- Source:
- Ordering.scala
Returns whether or not the other ordering is the opposite ordering of this one.
Returns whether or not the other ordering is the opposite ordering of this one.
Equivalent to other == this.reverse
.
Implementations should only override this method if they are overriding reverse as well.
- Source:
- Ordering.scala
Returns whether or not the other ordering is the opposite ordering of this one.
Returns whether or not the other ordering is the opposite ordering of this one.
Equivalent to other == this.reverse
.
Implementations should only override this method if they are overriding reverse as well.
- Source:
- Ordering.scala
Returns whether or not the other ordering is the opposite ordering of this one.
Returns whether or not the other ordering is the opposite ordering of this one.
Equivalent to other == this.reverse
.
Implementations should only override this method if they are overriding reverse as well.
- Source:
- Ordering.scala
Return true if x
< y
in the ordering.
Return true if x
< y
in the ordering.
- Definition Classes
- Source:
- Ordering.scala
Return true if x
<= y
in the ordering.
Return true if x
<= y
in the ordering.
- Definition Classes
- Source:
- Ordering.scala
Return x
if x
>= y
, otherwise y
.
Return x
if x
>= y
, otherwise y
.
- Source:
- Ordering.scala
Return x
if x
>= y
, otherwise y
.
Return x
if x
>= y
, otherwise y
.
- Source:
- Ordering.scala
Return x
if x
<= y
, otherwise y
.
Return x
if x
<= y
, otherwise y
.
- Source:
- Ordering.scala
Return x
if x
<= y
, otherwise y
.
Return x
if x
<= y
, otherwise y
.
- Source:
- Ordering.scala
Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:
Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:
def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))
- Source:
- Ordering.scala
Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:
Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:
def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))
- Source:
- Ordering.scala
Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:
Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:
def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))
- Source:
- Ordering.scala
Creates an Ordering[T] whose compare function returns the
result of this Ordering's compare function, if it is non-zero,
or else the result of other
s compare function.
Creates an Ordering[T] whose compare function returns the
result of this Ordering's compare function, if it is non-zero,
or else the result of other
s compare function.
- Value parameters:
- other
an Ordering to use if this Ordering returns zero
- Example:
case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElse(Ordering.by[Pair, Int](_.b))
- Source:
- Ordering.scala
Creates an Ordering[T] whose compare function returns the
result of this Ordering's compare function, if it is non-zero,
or else the result of other
s compare function.
Creates an Ordering[T] whose compare function returns the
result of this Ordering's compare function, if it is non-zero,
or else the result of other
s compare function.
- Value parameters:
- other
an Ordering to use if this Ordering returns zero
- Example:
case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElse(Ordering.by[Pair, Int](_.b))
- Source:
- Ordering.scala
Creates an Ordering[T] whose compare function returns the
result of this Ordering's compare function, if it is non-zero,
or else the result of other
s compare function.
Creates an Ordering[T] whose compare function returns the
result of this Ordering's compare function, if it is non-zero,
or else the result of other
s compare function.
- Value parameters:
- other
an Ordering to use if this Ordering returns zero
- Example:
case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElse(Ordering.by[Pair, Int](_.b))
- Source:
- Ordering.scala
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Ordering[S].compare(f(x), f(y))
This function is equivalent to passing the result of Ordering.by(f)
to orElse
.
- Example:
case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElseBy[Int](_.b)
- Source:
- Ordering.scala
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Ordering[S].compare(f(x), f(y))
This function is equivalent to passing the result of Ordering.by(f)
to orElse
.
- Example:
case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElseBy[Int](_.b)
- Source:
- Ordering.scala
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Ordering[S].compare(f(x), f(y))
This function is equivalent to passing the result of Ordering.by(f)
to orElse
.
- Example:
case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElseBy[Int](_.b)
- Source:
- Ordering.scala
Return the opposite ordering of this one.
Return the opposite ordering of this one.
Implementations overriding this method MUST override isReverseOf as well if they change the behavior at all (for example, caching does not require overriding it).
- Definition Classes
- Source:
- Ordering.scala
Returns whether a comparison between x
and y
is defined, and if so
the result of compare(x, y)
.
Returns whether a comparison between x
and y
is defined, and if so
the result of compare(x, y)
.
- Source:
- Ordering.scala
Returns whether a comparison between x
and y
is defined, and if so
the result of compare(x, y)
.
Returns whether a comparison between x
and y
is defined, and if so
the result of compare(x, y)
.
- Source:
- Ordering.scala
Returns whether a comparison between x
and y
is defined, and if so
the result of compare(x, y)
.
Returns whether a comparison between x
and y
is defined, and if so
the result of compare(x, y)
.
- Source:
- Ordering.scala
Inherited methods
- Inherited from:
- Comparator
- Inherited from:
- Comparator
- Inherited from:
- Comparator
- Inherited from:
- Comparator
- Inherited from:
- Comparator
- Inherited from:
- Comparator
Implicits
Implicits
This implicit method augments T
with the comparison operators defined
in scala.math.Ordering.Ops
.
This implicit method augments T
with the comparison operators defined
in scala.math.Ordering.Ops
.
- Source:
- Ordering.scala
This implicit method augments T
with the comparison operators defined
in scala.math.Ordering.Ops
.
This implicit method augments T
with the comparison operators defined
in scala.math.Ordering.Ops
.
- Source:
- Ordering.scala
This implicit method augments T
with the comparison operators defined
in scala.math.Ordering.Ops
.
This implicit method augments T
with the comparison operators defined
in scala.math.Ordering.Ops
.
- Source:
- Ordering.scala