使用Scala

时间:2018-07-16 06:03:24

标签: scala sorting casting

我想按Scala中的第一列对列表进行排序。

我有一个这样的列表清单:

val a0 = List(0, "a0", 23)
val a1 = List(1, "a1", 231)
val a2 = List(2, "a2", 1)
val a3 = List(3, "a3", 80)
val a4 = List(4, "a4", 33)
val a5 = List(5, "a5", 23)
val a6 = List(6, "a6", 2)
val list1 = List(a0, a6, a2, a3, a1, a5, a4)

我想按第一列对其进行排序,因此预期输出为:

List(  
  List(0, a0, 23),
  List(1, a1, 231),
  List(2, a2, 1),
  List(3, a3, 80),
  List(4, a4, 33),
  List(5, a5, 23),
  List(6, a6, 2)
)

我尝试了

list1.sortBy(list => list(0))

但是会产生

  

错误:没有为Any定义任何隐式排序

我该怎么办?

1 个答案:

答案 0 :(得分:2)

这又是您的输入内容:

val a0 = List(0, "a0", 23)
val a1 = List(1, "a1", 231)
val a2 = List(2, "a2", 1)
val a3 = List(3, "a3", 80)
val a4 = List(4, "a4", 33)
val a5 = List(5, "a5", 23)
val a6 = List(6, "a6", 2)
val list1 = List(a0, a6, a2, a3, a1, a5, a4)

这是您的排序方式:

val list2 = list1.sortBy(_(0).asInstanceOf[Int])

(0)获得第一个条目,asInstanceOf[Int]将其强制转换为整数。 _是列表的占位符,它是(list: List[Any]) => list(0).asInstanceOf[Int]的缩写。

如果您打印结果

list2 foreach println

你得到

List(0, a0, 23)
List(1, a1, 231)
List(2, a2, 1)
List(3, a3, 80)
List(4, a4, 33)
List(5, a5, 23)
List(6, a6, 2)