@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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。