Scala排序清单

示例

假设以下列表,我们可以采用多种方式进行排序。

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

的默认行为sorted()是使用math.Ordering,它对字符串进行字典排序:

names.sorted
// 结果显示在:列表(Alana,Allie,Beth,Kathryn,Serin)

sortWith 允许您使用比较功能提供自己的订购:

names.sortWith(_.length < _.length)
// 结果显示在:列表(Beth,Allie,Serin,Alana,Kathryn)

sortBy 允许您提供转换功能:

//一组元音要使用
val vowels = Set('a', 'e', 'i', 'o', 'u')

//计算名称中元音的功能
def countVowels(name: String) = name.count(l => vowels.contains(l.toLower))

//按元音数量排序
names.sortBy(countVowels)
//结果是:列表(Kathryn,Beth,Serin,Allie,Alana)

您始终可以使用`reverse来反转列表或排序列表:

names.sorted.reverse
//结果:列表(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的信息。