相关疑难解决方法(0)

简单的惯用方法来定义简单案例类的订购

我有一个简单的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)

sorting scala case-class

104
推荐指数
6
解决办法
6万
查看次数

使用排序来排序数组,升序和降序

我想通过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)

arrays sorting scala

5
推荐指数
1
解决办法
1742
查看次数

标签 统计

scala ×2

sorting ×2

arrays ×1

case-class ×1