排序列表

假設以下列表我們可以按各種方式排序。

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

sorted() 的預設行為是使用 math.Ordering ,這對於字串會導致詞法排序:

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

sortWith 允許你使用比較功能提供自己的訂購:

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

sortBy 允許你提供轉換功能:

//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)

你始終可以使用`reverse:反轉列表或排序列表:

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

列表也可以使用 Java 方法 java.util.Arrays.sort 及其 Scala 包裝器 scala.util.Sorting.quickSort 進行排序

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

如果可以避免集合轉換和拆箱/裝箱,這些方法可以在分類較大的集合時提高效能。有關效能差異的更詳細討論,請閱讀 Scala Collection sorted,sortWith 和 sortBy Performance