@implicitNotFound (msg = "沒有為 ${T} 定義隱式排序。")
用法 一
trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable
排序是一種特征,它的每個實例都代表一種對某個類型的實例進行排序的策略。
Ordering 的伴隨對象定義了許多隱式對象來處理 AnyVal 的子類型(例如 Int
、 Double
)、 String
等。
要按一個或多個成員變量對實例進行排序,您可以使用 Ordering.by 和 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)))
Ordering[T]
是通過指定 compare 方法 compare(a: T, b: T): Int
來實現的,該方法決定如何排序兩個實例 a
和 b
。 Ordering[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
,可以以許多其他方式對同一類型進行排序。 Ordered
和 Ordering
都提供了隱式允許它們可以互換使用。
您可以 import scala.math.Ordering.Implicits._
訪問其他隱式排序。
也可以看看:
伴生:
- object
源碼:
- Ordering.scala
用法 二
object Ordering extends LowPriorityOrderingImplicits
這是 scala.math.Ordering 特征的伴隨對象.
它包含許多隱式排序以及構造新排序的方法。
伴生:
- class
源碼:
- Ordering.scala
相關用法
- Scala math.Ordered用法及代碼示例
- Scala matching.Regex用法及代碼示例
- Scala map isDefinedAt()用法及代碼示例
- Scala map contains()用法及代碼示例
- Scala map()用法及代碼示例
- Scala mutable SortedSet contains()用法及代碼示例
- Scala mutable SortedSet equals()用法及代碼示例
- Scala mutable SortedSet subsetOf()用法及代碼示例
- Scala mutable SortedSet drop()用法及代碼示例
- Scala mutable.PriorityQueue用法及代碼示例
- Scala mutable SortedSet diff()用法及代碼示例
- Scala mutable SortedSet apply()用法及代碼示例
- Scala mutable SortedSet dropRight()用法及代碼示例
- Scala mutable.MultiMap用法及代碼示例
- Scala Tabulate.sliding用法及代碼示例
- Scala ArrayBuffer.inits用法及代碼示例
- Scala long.BitwiseOr用法及代碼示例
- Scala StringBuilder.partitionMap用法及代碼示例
- Scala List distinct()用法及代碼示例
- Scala DefaultMap.sizeIs用法及代碼示例
- Scala StrictOptimizedIterableOps.sliding用法及代碼示例
- Scala Searching.SearchResult用法及代碼示例
- Scala ::.collectFirst用法及代碼示例
- Scala TreeSet diff()用法及代碼示例
- Scala Char getClass()用法及代碼示例
注:本文由純淨天空篩選整理自scala-lang.org大神的英文原創作品 math.Ordering。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。