排序列表

假设以下列表我们可以按各种方式排序。

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