How do I sort an array in Scala?
I can see there's a sorting object, Sorting
, with a quicksort method, quickSort
, on it.
What would be a code example of using it, sorting an array of object of arbitrary type? It looks like I need to pass in an implementation of the Orderable
trait, but I am unsure of the syntax.
Also, I would prefer answers doing this the 'Scala way'. I know I can just use a Java library.
With Scala 2.8 or later it is possible to do:
List(3,7,5,2).sortWith(_ < _)
that uses java.util.Arrays.sort, an implementation of quicksort.
Nowadays this one works too:
List(3,7,5,2).sorted
Sorting.quickSort declares functions for taking an Array of numbers or Strings, but I'm assuming you mean you want to sort a list of objects of your own classes?
The function I think you're looking at is
quickSort [K](a : Array[K])(implicit view$1 : (K) => Ordered[K]) : Unit
Which, if I'm reading this right, means that the objects in the Array must have the Ordered
trait. So your class must extend Ordered
(or must mix it in), and therefore must implement the compare
method of that trait.
So to rip off an example from the book:
class MyClass(n: Int) extends Ordered[MyClass] {
...
def compare(that: MyClass) =
this.n - that.n
}
So given an Array[MyClass], then Sorting.quickSort should work.