Хорошо, я не совсем уверен, чем вы недовольны из-за того, что делаете в настоящее время, но, возможно, все, что вы ищете, это?
implicit def toComparator(a: AccResult) = new Comparator(a)
scala.util.Sorting.quickSort(data)
Если, с другой стороны, проблема в том, что кортеж равен Ordered
, и вы хотите другой порядок, вот почему он изменился в Scala 2.8. 1009 *
* РЕДАКТИРОВАТЬ *
Ой! Извините, я только сейчас понимаю, что вы сказали, что предпочитаете решения Scala 2.7. Я отредактировал этот ответ в ближайшее время, чтобы поставить решение для 2.7 выше. Далее следует решение 2.8.
Scala 2.8 ожидает Ordering
, а не Ordered
, который связан с контекстом, а не с представлением. Вы бы написали свой код в 2.8 так:
type AccResult = (AccUnit, Long) // pair
implicit object AccResultOrdering extends Ordering[AccResult] {
def compare(x: AccResult, y: AccResult) = if (x._2 == y._2) 0 else if (x._2 < y._2) -1 else 1
}
Или, может быть, просто:
type AccResult = (AccUnit, Long) // pair
implicit val AccResultOrdering = Ordering by ((_: AccResult)._2)
И используйте это как:
scala.util.Sorting.quickSort(data)
С другой стороны, обычный способ выполнить сортировку в Scala 2.8 - просто вызвать один из методов сортировки, например:
data.sortBy((_: AccResult)._2)