Kotlin 列表排序和获取元素
我有课:Kotlin 列表排序和获取元素,kotlin,Kotlin,我有课: class SportMan( val name: String, val points: Double, } 以及名为SportGuysList的Sportman对象列表。我想从包含前5个Sportman对象的SportGuysList创建一个新列表。您可以先按点数降序对列表进行排序,从列表中选取前5名玩家,然后按原始列表中的索引对其进行排序: val topByPoints = SportGuysList.sortedByDescending { it.points
class SportMan(
val name: String,
val points: Double,
}
以及名为
SportGuysList
的Sportman
对象列表。我想从包含前5个Sportman
对象的SportGuysList
创建一个新列表。您可以先按点数降序对列表进行排序,从列表中选取前5名玩家,然后按原始列表中的索引对其进行排序:
val topByPoints = SportGuysList.sortedByDescending { it.points }.take(5)
val result = topByPoints.sortedBy { SportGuysList.indexOf(it) }
如果SportGuysList
很大,那么在排序过程中搜索每个结果元素的索引可能需要很长时间,因此您可以记住每个运动员旁边的原始索引:
val result =
SportGuysList.withIndex() // now we have pairs of value-index
.sortedByDescending { it.value.points } // sort by points
.take(5) // top 5
.sortedBy { it.index } // sort back by index
.map { it.value } // take only value from an each indexed pair
在科特林游乐场试一试:您可以先按点数降序对列表进行排序,从中选出前5名玩家,然后按原始列表中的索引对他们进行排序:
val topByPoints = SportGuysList.sortedByDescending { it.points }.take(5)
val result = topByPoints.sortedBy { SportGuysList.indexOf(it) }
如果SportGuysList
很大,那么在排序过程中搜索每个结果元素的索引可能需要很长时间,因此您可以记住每个运动员旁边的原始索引:
val result =
SportGuysList.withIndex() // now we have pairs of value-index
.sortedByDescending { it.value.points } // sort by points
.take(5) // top 5
.sortedBy { it.index } // sort back by index
.map { it.value } // take only value from an each indexed pair
尝试在科特林游乐场:但这不起作用。它只返回按点排序的结果。。。我想保持相同的顺序,但选择具有前5个点的sportguys yep@llya这看起来是个好主意,但我只是尝试调试它,它只返回按点降序排序的结果:/是的,我做了!嗯,看起来很奇怪。我将再次检查它,它不是wokring…代码很简单,我只是复制粘贴它。。。。我使用的是MutableList而不是List->var sportsmen:MutableList=mutableListOf()。但这是不应该改变任何事情的…我已经添加了一个链接到科特林游乐场与答案的代码。它是否像你预期的那样工作?但这不起作用。它只返回按点排序的结果。。。我想保持相同的顺序,但选择具有前5个点的sportguys yep@llya这看起来是个好主意,但我只是尝试调试它,它只返回按点降序排序的结果:/是的,我做了!嗯,看起来很奇怪。我将再次检查它,它不是wokring…代码很简单,我只是复制粘贴它。。。。我使用的是MutableList而不是List->var sportsmen:MutableList=mutableListOf()。但这是不应该改变任何事情的…我已经添加了一个链接到科特林游乐场与答案的代码。它是否如你所期望的那样工作?