我有一些自定义类的实例列表:
data class Flight(val duration: Int)
Run Code Online (Sandbox Code Playgroud)
例如:
val flights = listOf(Flight(10), Flight(5), Flight(5), Flight(15), Flight(20))
Run Code Online (Sandbox Code Playgroud)
如何最有效地找到此列表中最小元素的第一个索引?在这种情况下,min 元素的第一个索引是 1,因为航班 [1].duration = 5。
s1m*_*nw1 10
我猜这样的事情将是“最有效的”:
var min: Pair<Int, Flight>? = null
for (f in flights.withIndex()) {
if (min == null || min.second.duration > f.value.duration) min = f.index to f.value
}
Run Code Online (Sandbox Code Playgroud)
而这个基本上是一样的,看起来好多了:
flights.withIndex().minBy { (_, f) -> f.duration }?.index
Run Code Online (Sandbox Code Playgroud)
使用minBy()获取具有最短持续时间的列表项,
然后使用indexOf()获取其索引:
val index = flights.indexOf(flights.minBy { it.duration })
Run Code Online (Sandbox Code Playgroud)
对于列表的 1 次扫描,您可以执行经典循环:
var index = if (flights.isEmpty()) -1 else 0
flights.forEachIndexed { i, flight ->
if (flight.duration < flights[index].duration) index = i
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |