【发布时间】:2018-02-09 09:31:15
【问题描述】:
This answer 解释了如何在使用其内置方法.sortBy 时反转数组的排序顺序。使用scala.util.Sorting.quickSort时如何颠倒排序?
【问题讨论】:
-
为什么不采用同样的方式?
This answer 解释了如何在使用其内置方法.sortBy 时反转数组的排序顺序。使用scala.util.Sorting.quickSort时如何颠倒排序?
【问题讨论】:
像这样:
import scala.util.Sorting.quickSort
val a = Array(1, 2, 3)
quickSort[Int](a)(Ordering[Int].reverse)
// ^---^ the most important bit
println(a.toVector) // Vector(3, 2, 1)
quickSort 是一个函数,它具有 Int、Float 和 Double 的重载,它不允许您指定排序,以及具有 Ordering 实例的任何类型 [T] 的通用函数.
如果你有一个 Int、Float 或 Double 的数组,重载解析将更喜欢专门的版本,所以你将无法手动传递 Ordering,除非你指定一个类型参数(所以现在编译只有一种选择)。
对于这三种类型以外的数组(例如Longs),您可以省略类型参数,因为只有一个有效选项:
val b = Array(1L, 2L, 3L)
quickSort(b)(Ordering[Long].reverse)
println(b.toVector) // Vector(3, 2, 1)
【讨论】:
如果您查找quickSort 的类型签名,您应该会发现:
def quickSort[K](a: Array[K])(implicit arg0: math.Ordering[K]): Unit
显然这意味着您可以通过实现隐式Ordering[K](或传入一个)来自定义行为。
例子:
val a = Array(3, 4, 2, 3)
quickSort[Int](a)(Ordering.Int.reverse)
【讨论】: