gpt4 book ai didi

sorting - 如何使用自定义顺序对 kotlin 中的对象数组进行排序?

转载 作者:行者123 更新时间:2023-12-02 12:41:12 24 4
gpt4 key购买 nike

我有一个对象数组 User(val name: String, val role: String) 。角色可以是:领导者、学生、老师、家长。并且应该按这个顺序排序。我已经阅读了一些关于 Comparator 的文章,但还没有弄清楚它们是如何工作的。您能否也添加一些解释?

最佳答案

您可以实例化一个 HashMap 来指示角色优先级:

private val roles: HashMap<String, Int> = hashMapOf(
"Leader" to 0,
"Student" to 1,
"Teacher" to 2,
"Parent" to 3
)

fun sortUsers(users: ArrayList<User>): ArrayList<User> {
val comparator = Comparator { o1: User, o2: User ->
return@Comparator roles[o1.role]!! - roles[o2.role]!!
}
val copy = arrayListOf<User>().apply { addAll(users) }
copy.sortWith(comparator)
return copy
}

在比较器中,如果减法结果为负数,则按照[o1, o2]的顺序进行排序。否则,[o2, o1]。因此,在这种情况下,它将以升序方式对您的列表进行排序(因为我们的优先级最高为 0 - HashMap 中指示的领导者)。

例如,如果我们有 o1 作为 Teachero2 作为 Leader
比较器的结果将是: 2 - 0 = 2 这是一个正整数。因此,它被排序为 [o2 (Leader), o1 (Teacher)]
然而,反转角色会产生相反的结果: 0 - 2 = -2 ,因此它将被排序 [o1 (Teacher), o2 (Leader)]

您可以使用以下方法验证此结果:
fun main(args: Array<String>) {
val users = arrayListOf(
User("john", "Student"),
User("tim", "Teacher"),
User("nice", "Student"),
User("hey", "Leader"),
User("you", "Parent")
)
println(sortUsers(users))
}

打印出来的是: [User(name=hey, role=Leader), User(name=john, role=Student), User(name=nice, role=Student), User(name=tim, role=Teacher), User(name=you, role=Parent)]

关于sorting - 如何使用自定义顺序对 kotlin 中的对象数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59402219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com