【发布时间】:2018-02-04 19:51:09
【问题描述】:
让我们有一个class Player(val position: Int, val time: Float),我们想通过position 对players 的数组或列表进行排序。如果其中一些players 在第一次排序后具有相同的position,我们希望将它们按time 分组。我所说的组是指一组具有相同位置的players。
我知道
list.sortedWith(compareBy<Foo> { it.a }.thenByDescending { it.b }.thenBy { it.c })
但当然它并不能解决这个问题。
在 Kotlin 中有什么聪明的方法来完成这个简单的任务吗?我们可以通过检查位置和交换项目来手动排序,但我想知道 Kotlin 在这种情况下是否有话要说。
【问题讨论】:
-
为什么
sortedWith不解决这个案子? -
你应该让你的问题更清楚:你有什么样的数据结构,你想让这个总是排序,即每当添加一个新元素时,它应该在适当的位置排序位置还是您想要一个按需排序的功能?那你需要什么数据结构呢?
-
是的,我没有具体说明这一点。我希望 kotlin 用这样的案例来炫耀,将数组转换为映射然后再转换回数组只是不想要的解决方案。我想到了一些技巧,比如并行排序,甚至使用一些额外的谓词,但你是对的,我们可以通过将列表转换为映射然后再返回来对其进行排序。我将您的答案标记为正确。
标签: android algorithm sorting kotlin comparable