val array = Array((for(i <- 0 to 10) yield scala.util.Random.nextInt): _*)
scala.util.Sorting.quickSort(array)
La matrice "par défaut" de Scala est une structure de données mutable, très proche de celle de Java. En règle générale, cela signifie qu'un "tableau" n'est pas très Scala-ish, même si les structures de données mutables vont. Cela sert un but, cependant. Si le tableau est le bon type de données pour votre besoin, alors c'est comme ça que vous le faites. Il y a d'autres méthodes de tri sur le tri des objets, d'ailleurs.
Je pense que je viens de réaliser quelle est votre question ... vous n'avez besoin de passer aucun paramètre implicite (c'est implicite, après tout). Ce paramètre existe pour dire qu'il doit y avoir un moyen de convertir le type K en un Ordered [K]. Ces définitions existent déjà pour les classes de Scala, donc vous n'en avez pas besoin.
Pour une classe arbitraire, vous pouvez le définir ainsi:
scala> case class Person(name: String)
defined class Person
scala> val array = Array(Person("John"), Person("Mike"), Person("Abe"))
array: Array[Person] = Array(Person(John), Person(Mike), Person(Abe))
scala> scala.util.Sorting.quickSort(array)
<console>:11: error: no implicit argument matching parameter type (Person) => Ordered[Person] was found.
scala.util.Sorting.quickSort(array)
^
scala> class OrderedPerson(val person: Person) extends Ordered[Person] {
| def compare(that: Person) = person.name.compare(that.name)
| }
defined class OrderedPerson
scala> implicit def personToOrdered(p: Person) = new OrderedPerson(p)
personToOrdered: (p: Person)OrderedPerson
scala> scala.util.Sorting.quickSort(array)
scala> array
res8: Array[Person] = Array(Person(Abe), Person(John), Person(Mike))
Maintenant, si la personne a été condamnée à commencer, ce ne serait pas un problème:
scala> case class Person(name: String) extends Ordered[Person] {
| def compare(that: Person) = name.compare(that.name)
| }
defined class Person
scala> val array = Array(Person("John"), Person("Mike"), Person("Abe"))
array: Array[Person] = Array(Person(John), Person(Mike), Person(Abe))
scala> scala.util.Sorting.quickSort(array)
scala> array
res10: Array[Person] = Array(Person(Abe), Person(John), Person(Mike))
Oui, c'est celui-là. C'est logique maintenant que vous le signalez. Comment pourrais-je le mélanger? –
Voir édition. Vous pouvez * étendre * comme mon exemple, ou utiliser "class MyClass extends OtherClass avec Ordered [MyClass]", qui est un mix-in. – skaffman
Merci. Je pense que je ferai le dernier. –