Scala Language Ordina una lista


Esempio

Supponendo che il seguente elenco possiamo ordinare una varietà di modi.

val names = List("Kathryn", "Allie", "Beth", "Serin", "Alana")

Il comportamento predefinito di sorted() consiste nell'utilizzare math.Ordering , che per le stringhe restituisce un ordinamento lessografico :

names.sorted
// results in: List(Alana, Allie, Beth, Kathryn, Serin)

sortWith consente di fornire il proprio ordine utilizzando una funzione di confronto:

names.sortWith(_.length < _.length)
// results in: List(Beth, Allie, Serin, Alana, Kathryn)

sortBy ti consente di fornire una funzione di trasformazione:

//A set of vowels to use
val vowels = Set('a', 'e', 'i', 'o', 'u')

//A function that counts the vowels in a name
def countVowels(name: String) = name.count(l => vowels.contains(l.toLower))

//Sorts by the number of vowels
names.sortBy(countVowels)
//result is: List(Kathryn, Beth, Serin, Allie, Alana)

Puoi sempre invertire una lista, o una lista ordinata, usando `reverse:

names.sorted.reverse
//results in: List(Serin, Kathryn, Beth, Allie, Alana)

Gli elenchi possono anche essere ordinati utilizzando il metodo Java java.util.Arrays.sort e il suo wrapper Scala scala.util.Sorting.quickSort

java.util.Arrays.sort(data)
scala.util.Sorting.quickSort(data)

Questi metodi possono migliorare le prestazioni quando si ordinano raccolte più grandi, se è possibile evitare le conversioni di raccolta e di disimballaggio / boxing. Per una discussione più dettagliata sulle differenze di prestazioni, leggi su Scala Collection ordinata, sortWith e sortBy Performance .