scala.math

Ordering

trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable

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 compare(a:T, b:T), 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.

Self Type
Ordering[T]
Annotations
@implicitNotFound( msg = ... )
Source
Ordering.scala
Version

0.9.5, 2008-04-15

Since

2.7

See also

scala.math.Ordered, scala.util.Sorting

Linear Supertypes
PartialOrdering[T], Equiv[T], Serializable, java.io.Serializable, Comparator[T], AnyRef, Any
Known Subclasses
Type Hierarchy Learn more about scaladoc diagrams
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Ordering
  2. PartialOrdering
  3. Equiv
  4. Serializable
  5. Serializable
  6. Comparator
  7. AnyRef
  8. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Type Members

  1. class Ops extends AnyRef

    This inner class defines comparison operators available for T.

Abstract Value Members

  1. abstract def compare(x: T, y: T): Int

    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)
    Definition Classes
    Ordering → Comparator

Concrete Value Members

  1. final def !=(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Definition Classes
    AnyRef → Any
  3. def +(other: String): String

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to any2stringadd[Ordering[T]] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (Ordering[T], B)

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to ArrowAssoc[Ordering[T]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  6. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  7. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  8. def ensuring(cond: (Ordering[T]) ⇒ Boolean, msg: ⇒ Any): Ordering[T]

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to Ensuring[Ordering[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  9. def ensuring(cond: (Ordering[T]) ⇒ Boolean): Ordering[T]

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to Ensuring[Ordering[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  10. def ensuring(cond: Boolean, msg: ⇒ Any): Ordering[T]

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to Ensuring[Ordering[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  11. def ensuring(cond: Boolean): Ordering[T]

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to Ensuring[Ordering[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  12. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  13. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  14. def equiv(x: T, y: T): Boolean

    Return true if x == y in the ordering.

    Return true if x == y in the ordering.

    Definition Classes
    OrderingPartialOrderingEquiv
  15. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  16. def formatted(fmtstr: String): String

    Returns string formatted according to given format string.

    Returns string formatted according to given format string. Format strings are as for String.format (@see java.lang.String.format).

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to StringFormat[Ordering[T]] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  17. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  18. def gt(x: T, y: T): Boolean

    Return true if x > y in the ordering.

    Return true if x > y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  19. def gteq(x: T, y: T): Boolean

    Return true if x >= y in the ordering.

    Return true if x >= y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  20. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  21. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  22. def lt(x: T, y: T): Boolean

    Return true if x < y in the ordering.

    Return true if x < y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  23. def lteq(x: T, y: T): Boolean

    Return true if x <= y in the ordering.

    Return true if x <= y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  24. def max(x: T, y: T): T

    Return x if x >= y, otherwise y.

  25. def min(x: T, y: T): T

    Return x if x <= y, otherwise y.

  26. implicit def mkOrderingOps(lhs: T): Ops

    This implicit method augments T with the comparison operators defined in scala.math.Ordering.Ops.

  27. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  28. final def notify(): Unit

    Definition Classes
    AnyRef
  29. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  30. def on[U](f: (U) ⇒ T): Ordering[U]

    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))
  31. def reverse: Ordering[T]

    Return the opposite ordering of this one.

    Return the opposite ordering of this one.

    Definition Classes
    OrderingPartialOrdering
  32. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  33. def toString(): String

    Definition Classes
    AnyRef → Any
  34. def tryCompare(x: T, y: T): Some[Int]

    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).

    Definition Classes
    OrderingPartialOrdering
  35. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  36. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  37. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  38. def [B](y: B): (Ordering[T], B)

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to ArrowAssoc[Ordering[T]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Inherited from PartialOrdering[T]

Inherited from Equiv[T]

Inherited from Serializable

Inherited from java.io.Serializable

Inherited from Comparator[T]

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd from Ordering[T] to any2stringadd[Ordering[T]]

Inherited by implicit conversion StringFormat from Ordering[T] to StringFormat[Ordering[T]]

Inherited by implicit conversion Ensuring from Ordering[T] to Ensuring[Ordering[T]]

Inherited by implicit conversion ArrowAssoc from Ordering[T] to ArrowAssoc[Ordering[T]]

Ungrouped