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 StringAdd
  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: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

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

    Implicit information
    This member is added by an implicit conversion from Ordering[T] to StringAdd[Ordering[T]] performed by method StringAdd in scala.Predef.
    Definition Classes
    StringAdd
  5. 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()
  6. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  7. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  8. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  9. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  10. 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
  11. 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
  12. 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
  13. 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
  14. final def eq(arg0: AnyRef): Boolean

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

    Definition Classes
    AnyRef → Any
  16. 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
  17. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  18. 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()
  19. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  20. 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
  21. 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
  22. def hashCode(): Int

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

    Definition Classes
    Any
  24. 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
  25. 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
  26. def max(x: T, y: T): T

    Return x if x >= y, otherwise y.

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

    Return x if x <= y, otherwise y.

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

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

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

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

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

    Definition Classes
    AnyRef
  32. 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))
  33. def reverse: Ordering[T]

    Return the opposite ordering of this one.

    Return the opposite ordering of this one.

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

    Definition Classes
    AnyRef
  35. def toString(): String

    Definition Classes
    AnyRef → Any
  36. 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
  37. final def wait(): Unit

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

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

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  40. 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 StringAdd from Ordering[T] to StringAdd[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