我有一个简单的scala案例类实例列表,我想用可预测的字典顺序打印它们list.sorted,但是接收"没有为......定义的隐式排序".
是否存在为案例类提供词典排序的隐式?
是否有简单的惯用方法将词典排序组合成案例类?
scala> case class A(tag:String, load:Int)
scala> val l = List(A("words",50),A("article",2),A("lines",7))
scala> l.sorted.foreach(println)
<console>:11: error: No implicit Ordering defined for A.
l.sorted.foreach(println)
^
Run Code Online (Sandbox Code Playgroud)
我对'黑客'不满意:
scala> l.map(_.toString).sorted.foreach(println)
A(article,2)
A(lines,7)
A(words,50)
Run Code Online (Sandbox Code Playgroud) 我想通过3rd和first元素对元组数组进行排序,因此我使用了以下代码:
import scala.util.Sorting
val pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3))
// sort by the 3rd element, then 1st
Sorting.quickSort(pairs)(Ordering[(Int, String)].on(x => (x._3, x._1)))
Run Code Online (Sandbox Code Playgroud)
我的问题是,在前面的例子中,我可以按第三个和第一个元素升序排序,或者两个元素都降序(使用反向).但是如何按第三个元素升序和第一个元素降序排序.
请在您的回答中考虑以下情况:
Array[Array[People]]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我不知道内部数组的确切大小(取决于我读入此数组的文件架构),我想按侧面的所有项目排序(一些升序和一些降序).
编辑:看起来,我很想念.
这是我的完整案例:我有以下课程:
sealed trait GValue extends Serializable with Ordered[GValue]{
def compare(o: GValue): Int = {
o match {
case GDouble(v) => this.asInstanceOf[GDouble].v compare v
case GString(v) => this.asInstanceOf[GString].v compare v
}
}
case class GDouble(v: Double) extends GValue
case class GString(v: String) extends GValue
Run Code Online (Sandbox Code Playgroud)
我想做一个像这样的代码.
// (startInterval, StopInterval, …Run Code Online (Sandbox Code Playgroud)