排序列表
假设以下列表我们可以按各种方式排序。
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 。