簡體   English   中英

Scala 中的排序問題,出現“發散隱式擴展.....”錯誤。 根據元組的第一個元素但按相反的順序對元組列表進行排序

[英]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(_._1).reverse

...或者通過更換隱Ordering有明確的反向Ordering

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

發生錯誤,因為-方法未在String定義。 以下工作正常:

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

這是因為-是為Int定義的。

也許你的意思是這樣的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM