У меня есть следующий список
scala> List(Double.NaN, 0.0, 99.9, 34.2, 10.98, 7.0, 6.0, Double.NaN, 5.0, 2.0, 0.56, Double.NaN, 0.0, 10.0)
res0: List[Double] = List(NaN, 0.0, 99.9, 34.2, 10.98, 7.0, 6.0, NaN, 5.0, 2.0, 0.56, NaN, 0.0, 10.0)
Это моя функция сравнения:
scala> def sortAscendingDouble(d1:Double, d2:Double) = {
| if(d1.isNaN && !d2.isNaN)
| d1 < d2
| else if(!d1.isNaN && d2.isNaN)
| d2 < d1
| else d1< d2
| }
sortAscendingDouble: (d1: Double, d2: Double)Boolean
Я пытаюсь использовать ее sortWith следующим образом:
scala> res0.sortWith((d1, d2)=> sortAscendingDouble(d1, d2))
res1: List[Double] = List(NaN, 0.0, 0.0, 0.56, 2.0, 5.0, 6.0, 7.0, 10.0, 10.98, 34.2, 99.9, NaN, NaN)
Я не понимаю, почему первый NaN не идет в конец списка.
Мой ожидаемый вывод для отсортированного списка по возрастанию:
List(0.0, 0.0, 0.56, 2.0, 5.0, 6.0, 7.0, 10.0, 10.98, 34.2, 99.9, NaN, NaN, NaN)
Мойожидаемый результат для отсортированного списка в порядке убывания:
List(99.9, 34.2, 10.98, 10.0, 7.0, 6.0, 5.0, 2.0, 0.56, 0.0, 0.0, NaN, NaN, NaN
В случае сортировки как по возрастанию, так и по убыванию, я хочу, чтобы NaN шли в конце.
Я знаюsortWith позволяет нам написать собственный компаратор.Может ли кто-нибудь помочь мне с этим?