当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Scala math.Ordering用法及代码示例


@implicitNotFound (msg = "没有为 ${T} 定义隐式排序。")

用法 一

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

排序是一种特征,它的每个实例都代表一种对某个类型的实例进行排序的策略。

Ordering 的伴随对象定义了许多隐式对象来处理 AnyVal 的子类型(例如 IntDouble )、 String 等。

要按一个或多个成员变量对实例进行排序,您可以使用 Ordering.byOrdering.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)))

Ordering[T] 是通过指定 compare 方法 compare(a: T, b: T): Int 来实现的,该方法决定如何排序两个实例 abOrdering[T] 的实例可以被 scala.util.Sorting 之类的东西用来对 Array[T] 之类的集合进行排序。

例如:

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)

此 trait 和 scala.math.Ordered 都提供相同的函数,但方式不同。 T 类型可以通过扩展 Ordered 以单一方式对其自身进行排序。使用 Ordering ,可以以许多其他方式对同一类型进行排序。 OrderedOrdering 都提供了隐式允许它们可以互换使用。

您可以 import scala.math.Ordering.Implicits._ 访问其他隐式排序。

也可以看看:

伴生:

object

源码:

Ordering.scala

用法 二

object Ordering extends LowPriorityOrderingImplicits

这是 scala.math.Ordering 特征的伴随对象.

它包含许多隐式排序以及构造新排序的方法。

伴生:

class

源码:

Ordering.scala

相关用法


注:本文由纯净天空筛选整理自scala-lang.org大神的英文原创作品 math.Ordering。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。