📅  最后修改于: 2023-12-03 14:54:42.425000             🧑  作者: Mango
排序是计算机科学中常见的操作之一,它可以将一组数据按照一定的规则进行排列,便于数据的查找和比较。在 Kotlin 中,我们可以使用 sortedBy
和 sortedWith
函数来对对象列表进行排序。
sortedBy
排序sortedBy
函数按照指定规则对对象列表进行排序。例如,我们有一个 Person
类,其中包含 name
和 age
属性:
data class Person(val name: String, val age: Int)
我们可以按照年龄升序排列这些人:
val people = listOf(
Person("Alice", 29),
Person("Bob", 31),
Person("Charlie", 24)
)
val sortedByAge = people.sortedBy { it.age }
println(sortedByAge) // [Person(name=Charlie, age=24), Person(name=Alice, age=29), Person(name=Bob, age=31)]
在这个例子中,我们使用 sortedBy
函数,并使用 lambda 表达式 it.age
来指定排序规则。该 lambda 函数指示 sortedBy
函数按照对象的 age
属性进行排序。
sortedWith
排序sortedWith
函数是 sortedBy
函数的泛化版本,它允许我们使用自定义比较器来指定排序规则。例如,如果我们想按照年龄降序排列 Person
对象,我们可以创建一个名为 AgeComparator
的比较器:
class AgeComparator : Comparator<Person> {
override fun compare(a: Person, b: Person) = b.age - a.age
}
然后我们可以使用 sortedWith
函数来对 Person
对象列表进行排序:
val sortedWithAge = people.sortedWith(AgeComparator())
println(sortedWithAge) // [Person(name=Bob, age=31), Person(name=Alice, age=29), Person(name=Charlie, age=24)]
在这个例子中,我们首先创建了 AgeComparator
比较器类,该类实现了 Comparator<Person>
接口。然后我们使用 sortedWith
函数,并将 AgeComparator
比较器作为参数传递给它,以指定排序规则。
reversed
反转排序如果我们想反转列表中的元素排序,我们可以使用 reversed
函数,该函数返回一个与对象列表相反顺序排列的新列表。例如,我们可以将上述示例中按年龄升序排列的 Person
对象列表反转:
val reversedByAge = people.sortedBy { it.age }.reversed()
println(reversedByAge) // [Person(name=Bob, age=31), Person(name=Alice, age=29), Person(name=Charlie, age=24)]
在这个例子中,我们首先使用 sortedBy
函数按年龄升序排列 Person
对象列表,然后使用 reversed
函数反转它们的顺序。
在 Kotlin 中,我们可以使用 sortedBy
和 sortedWith
函数来对对象列表进行排序,从而使数据更加有序。我们还可以使用 reversed
函数反转排序顺序。这些函数使得排序列表变得更加容易和灵活。