2
2
** ________ ___ / / ___ Scala API **
3
** / __/ __// _ | / / / _ | (c) 2003-2011, LAMP/EPFL **
3
** / __/ __// _ | / / / _ | (c) 2003-2013, LAMP/EPFL **
4
4
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
5
5
** /____/\___/_/ |_/____/_/ | | **
11
12
import java.util.Comparator
13
import scala.language.{implicitConversions, higherKinds}
13
15
/** Ordering is a trait whose instances each represent a strategy for sorting
14
16
* instances of a type.
24
26
* val pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3))
26
28
* // sort by 2nd element
27
* Sorting.quickSort(pairs)(Ordering.by[(String, Int, Int), Int](_._2)
29
* Sorting.quickSort(pairs)(Ordering.by[(String, Int, Int), Int](_._2))
29
31
* // sort by the 3rd element, then 1st
30
* Sorting.quickSort(pairs)(Ordering[(Int, String)].on[(String, Int, Int)]((_._3, _._1))
32
* Sorting.quickSort(pairs)(Ordering[(Int, String)].on(x => (x._3, x._1)))
33
35
* An Ordering[T] is implemented by specifying compare(a:T, b:T), which
262
264
implicit object Long extends LongOrdering
264
266
trait FloatOrdering extends Ordering[Float] {
265
269
def compare(x: Float, y: Float) = java.lang.Float.compare(x, y)
271
override def lteq(x: Float, y: Float): Boolean = x <= y
272
override def gteq(x: Float, y: Float): Boolean = x >= y
273
override def lt(x: Float, y: Float): Boolean = x < y
274
override def gt(x: Float, y: Float): Boolean = x > y
275
override def equiv(x: Float, y: Float): Boolean = x == y
276
override def max(x: Float, y: Float): Float = math.max(x, y)
277
override def min(x: Float, y: Float): Float = math.min(x, y)
279
override def reverse: Ordering[Float] = new FloatOrdering {
280
override def reverse = outer
281
override def compare(x: Float, y: Float) = outer.compare(y, x)
283
override def lteq(x: Float, y: Float): Boolean = outer.lteq(y, x)
284
override def gteq(x: Float, y: Float): Boolean = outer.gteq(y, x)
285
override def lt(x: Float, y: Float): Boolean = outer.lt(y, x)
286
override def gt(x: Float, y: Float): Boolean = outer.gt(y, x)
267
289
implicit object Float extends FloatOrdering
269
291
trait DoubleOrdering extends Ordering[Double] {
270
294
def compare(x: Double, y: Double) = java.lang.Double.compare(x, y)
296
override def lteq(x: Double, y: Double): Boolean = x <= y
297
override def gteq(x: Double, y: Double): Boolean = x >= y
298
override def lt(x: Double, y: Double): Boolean = x < y
299
override def gt(x: Double, y: Double): Boolean = x > y
300
override def equiv(x: Double, y: Double): Boolean = x == y
301
override def max(x: Double, y: Double): Double = math.max(x, y)
302
override def min(x: Double, y: Double): Double = math.min(x, y)
304
override def reverse: Ordering[Double] = new DoubleOrdering {
305
override def reverse = outer
306
override def compare(x: Double, y: Double) = outer.compare(y, x)
308
override def lteq(x: Double, y: Double): Boolean = outer.lteq(y, x)
309
override def gteq(x: Double, y: Double): Boolean = outer.gteq(y, x)
310
override def lt(x: Double, y: Double): Boolean = outer.lt(y, x)
311
override def gt(x: Double, y: Double): Boolean = outer.gt(y, x)
272
314
implicit object Double extends DoubleOrdering