當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。