val array = Array((for(i <- 0 to 10) yield scala.util.Random.nextInt): _*)
scala.util.Sorting.quickSort(array)
L'array "predefinito" di Scala è una struttura di dati mutabile, molto vicina all'array di Java. In generale, ciò significa che un "array" non è molto Scala-ish, anche se le strutture di dati mutabili vanno. Serve comunque a uno scopo. Se l'array è il giusto tipo di dati per le tue necessità, allora è così che lo metti in ordine. A proposito, ci sono altri metodi di ordinamento sull'ordinamento degli oggetti.
Penso di aver appena capito qual è la tua domanda ... non è necessario passare alcun parametro implicito (è implicito, dopotutto). Questo parametro esiste per dire che ci deve essere un modo per convertire il tipo K in un ordinato [K]. Queste definizioni esistono già per le classi di Scala, quindi non ne hai bisogno.
per una classe arbitraria è possibile definire in questo modo:
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))
Ora, se persona è stato ordinato di cominciare, questo sarebbe non essere un problema:
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))
fonte
2009-07-15 15:03:14
Sì, è quello. Ha senso ora lo fai notare. Come lo "mescolerei"? –
Vedi modifica. O estendi * come il mio esempio, oppure usa "classe MyClass estende OtherClass con Ordinato [MyClass]", che è un mix-in. – skaffman
Grazie. Penso che farò il secondo. –