排序列表
假設以下列表我們可以按各種方式排序。
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 。