首页 > 解决方案 > scala 中的排序问题,出现“发散隐式扩展......”错误。根据第一个元素对元组列表进行排序,但顺序相反

问题描述

我正在尝试对 Scala 中的元组列表进行排序,以下代码将导致错误:

List("a"->1,"b"->2, "c"->3).sortBy(-_._1)

error: diverging implicit expansion for type scala.math.Ordering[B]
starting with method Tuple9 in object Ordering
       List("a"->1,"b"->2, "c"->3).sortBy(-_._1)
                                         ^

但下面的代码工作得很好:

List("a"->1,"b"->2, "c"->3).sortBy(_._1)

res39: List[(String, Int)] = List((a,1), (b,2), (c,3))

唯一的区别是负号sortBy

问题是什么?

标签: listscalacollectionsfunctional-programmingscala-collections

解决方案


由于没有负数之类的东西String,因此您无法对其进行排序。您可以通过反转排序结果来反转无法否定的元素类型......

List("a"->1, "b"->2, "c"->3).sortBy(_._1).reverse

Ordering...或通过用显式 reversed替换隐式Ordering

List("a"->1, "b"->2, "c"->3).sortBy(_._1)(Ordering[String].reverse)

推荐阅读