Scala 中的排序问题,出现 "Diverging implicit expansion ....." 错误。根据第一个元素但以相反的顺序对元组列表进行排序
Problem with sort in scala, got "Diverging implicit expansion ....." error. Sorting a list of tuples based on its first element but in reverse order
我正在尝试在 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
!
中的负号
问题是什么?
发生错误,因为 -
方法未在 String
上定义。以下工作正常:
List("a"->1, "b"->2, "c"->3).sortBy(-_._2)
因为-
是为Int
定义的。
也许你的意思是这样的:
List("a"->1, "b"->2, "c"->3).sortBy(-_._1.length)
因为没有否定 String
这样的东西,所以不能按它排序。您可以通过反转排序结果来对不能取反的元素类型进行反向排序...
List("a"->1, "b"->2, "c"->3).sortBy(_._1).reverse
...或通过将隐式 Ordering
替换为显式反向 Ordering
.
List("a"->1, "b"->2, "c"->3).sortBy(_._1)(Ordering[String].reverse)
我正在尝试在 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
!
问题是什么?
发生错误,因为 -
方法未在 String
上定义。以下工作正常:
List("a"->1, "b"->2, "c"->3).sortBy(-_._2)
因为-
是为Int
定义的。
也许你的意思是这样的:
List("a"->1, "b"->2, "c"->3).sortBy(-_._1.length)
因为没有否定 String
这样的东西,所以不能按它排序。您可以通过反转排序结果来对不能取反的元素类型进行反向排序...
List("a"->1, "b"->2, "c"->3).sortBy(_._1).reverse
...或通过将隐式 Ordering
替换为显式反向 Ordering
.
List("a"->1, "b"->2, "c"->3).sortBy(_._1)(Ordering[String].reverse)