Проблема с сортировкой в ​​scala, ошибка "Неявное расширение .....". Сортировка списка кортежей по первому элементу, но в обратном порядке - PullRequest
2 голосов
/ 17 января 2020

Я пытаюсь отсортировать список кортежей в 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!

В чем проблема?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Поскольку не существует такого понятия, как отрицательный 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)
1 голос
/ 17 января 2020

Произошла ошибка, поскольку метод - не определен в String. Следующее прекрасно работает:

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

Это потому, что - определено для Int.

Возможно, вы имели в виду что-то вроде:

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