paw*_*ior 1 sorting scala list
好吧,如果我知道该怎么做,我不会向你求助,无论如何,我的"程序"仍有问题.
class Mark(val name: String, val style_mark: Double, val other_mark: Double) {}
object Test extends Application
{
val m1 = new Mark("Smith", 18, 16);
val m2 = new Mark("Cole", 14, 7);
val m3 = new Mark("James", 13, 15);
val m4 = new Mark("Jones", 14, 16);
val m5 = new Mark("Richardson", 20, 19);
val m6 = new Mark("James", 4, 18);
val marks = List[Mark](m1, m2, m3, m4, m5, m6);
def avg(xs: List[Double]) = xs.sum / xs.length
val marksGrouped = marks.groupBy(_.name).map { kv => new Mark(kv._1, avg(kv._2.map(_.style_mark)), avg(kv._2.map(_.other_mark))) }
val marksSorted = marksGrouped.sortWith((m1, m2) => m1._style_mark < m2._style_mark)
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误: error: value sortWith is not a member of scala.collection.immutable.Iterable[Mark]
基本集合层次:
TraversableOnce:可能只能遍历一次,就像迭代器一样.Traversable:可以遍历,foreach但不提供其他保证.Iterable:可以生成iterator,这可以实现懒惰的遍历.
Seq:内容具有固定的遍历顺序.
IndexedSeq:可以通过位置编号有效地检索内容.Set:内容只包含每种类型的一个元素.Map:可以通过密钥有效地检索内容.所以你面临的问题是Iterable没有提供支持来定义遍历顺序,这就是做什么的sortWith.仅从派生的集合Seq- CAN List,Vector,ArrayBuffer,等.
该方法toSeq将返回Seq一个Iterable.或者您可以选择更具体的集合,其特征与您的算法完全匹配.
为了获得额外的高阶编程优势,请使用 sortBy,而不是 sortWith
val marksSorted = marksGrouped.toList.sortBy(_.style_mark)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4463 次 |
| 最近记录: |