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 ofAnyVal (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 usingOrdering.by andOrdering.on:
import scala.util.Sortingval pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3))// sort by 2nd elementSorting.quickSort(pairs)(Ordering.by[(String, Int, Int), Int](_._2))// sort by the 3rd element, then 1stSorting.quickSort(pairs)(Ordering[(Int, String)].on(x => (x._3, x._1)))AnOrdering[T] is implemented by specifying thecompare method,compare(a: T, b: T): Int, which decides how to order two instancesa andb. Instances ofOrdering[T] can be used by things likescala.util.Sorting to sort collections likeArray[T].
For example:
import scala.util.Sortingcase class Person(name:String, age:Int)val people = Array(Person("bob", 30), Person("ann", 32), Person("carl", 19))// sort by ageobject AgeOrdering extends Ordering[Person] { def compare(a:Person, b:Person) = a.age.compare(b.age)}Sorting.quickSort(people)(AgeOrdering)This trait andscala.math.Ordered both provide this same functionality, but in different ways. A typeT can be given a single way to order itself by extendingOrdered. UsingOrdering, this same type may be sorted in many other ways.Ordered andOrdering both provide implicits allowing them to be used interchangeably.
You canimport scala.math.Ordering.Implicits._ to gain access to other implicit orderings.
This inner class defines comparison operators available forT.
This inner class defines comparison operators available forT.
It can't extendAnyVal because it is not a top-level class or a member of a statically accessible object.
This inner class defines comparison operators available forT.
This inner class defines comparison operators available forT.
It can't extendAnyVal because it is not a top-level class or a member of a statically accessible object.
This inner class defines comparison operators available forT.
This inner class defines comparison operators available forT.
It can't extendAnyVal because it is not a top-level class or a member of a statically accessible object.
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)
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)
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)
Return true ifx ==y in the ordering.
Return true ifx >y in the ordering.
Return true ifx >=y in the ordering.
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 toother == this.reverse.
Implementations should only override this method if they are overridingreverse as well.
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 toother == this.reverse.
Implementations should only override this method if they are overridingreverse as well.
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 toother == this.reverse.
Implementations should only override this method if they are overridingreverse as well.
Return true ifx <y in the ordering.
Return true ifx <=y in the ordering.
Returnx ifx >=y, otherwisey.
Returnx ifx >=y, otherwisey.
Returnx ifx >=y, otherwisey.
Returnx ifx <=y, otherwisey.
Returnx ifx <=y, otherwisey.
Returnx ifx <=y, otherwisey.
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))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))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))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 ofothers 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 ofothers compare function.
an Ordering to use if this Ordering returns zero
case class Pair(a: Int, b: Int)val pairOrdering = Ordering.by[Pair, Int](_.a) .orElse(Ordering.by[Pair, Int](_.b))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 ofothers 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 ofothers compare function.
an Ordering to use if this Ordering returns zero
case class Pair(a: Int, b: Int)val pairOrdering = Ordering.by[Pair, Int](_.a) .orElse(Ordering.by[Pair, Int](_.b))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 ofothers 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 ofothers compare function.
an Ordering to use if this Ordering returns zero
case class Pair(a: Int, b: Int)val pairOrdering = Ordering.by[Pair, Int](_.a) .orElse(Ordering.by[Pair, Int](_.b))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 ofOrdering.by(f) toorElse.
case class Pair(a: Int, b: Int)val pairOrdering = Ordering.by[Pair, Int](_.a) .orElseBy[Int](_.b)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 ofOrdering.by(f) toorElse.
case class Pair(a: Int, b: Int)val pairOrdering = Ordering.by[Pair, Int](_.a) .orElseBy[Int](_.b)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 ofOrdering.by(f) toorElse.
case class Pair(a: Int, b: Int)val pairOrdering = Ordering.by[Pair, Int](_.a) .orElseBy[Int](_.b)Return the opposite ordering of this one.
Return the opposite ordering of this one.
Implementations overriding this method MUST overrideisReverseOf as well if they change the behavior at all (for example, caching does not require overriding it).
Returns whether a comparison betweenx andy is defined, and if so the result ofcompare(x, y).
Returns whether a comparison betweenx andy is defined, and if so the result ofcompare(x, y).
Returns whether a comparison betweenx andy is defined, and if so the result ofcompare(x, y).
Returns whether a comparison betweenx andy is defined, and if so the result ofcompare(x, y).
Returns whether a comparison betweenx andy is defined, and if so the result ofcompare(x, y).
Returns whether a comparison betweenx andy is defined, and if so the result ofcompare(x, y).
This implicit method augmentsT with the comparison operators defined inscala.math.Ordering.Ops.
This implicit method augmentsT with the comparison operators defined inscala.math.Ordering.Ops.
This implicit method augmentsT with the comparison operators defined inscala.math.Ordering.Ops.
This implicit method augmentsT with the comparison operators defined inscala.math.Ordering.Ops.
This implicit method augmentsT with the comparison operators defined inscala.math.Ordering.Ops.
This implicit method augmentsT with the comparison operators defined inscala.math.Ordering.Ops.