嘿,我在 kotlin 中有串列。我正在迭代它。我想將真/假存盤為標志索引,其中一個是整個串列中的最小值。我嘗試了一些代碼,但它不起作用。
fun main() {
val list = mutableListOf(4.83, 4.39, 3.58, 3.50, 3.46)
val minValue = mutableListOf<BestMinimumValue>()
var previousValue = 0.0
list.forEach {
minValue.add(BestMinimumValue(compareValue = previousValue > it))
previousValue = it
}
minValue.forEach {
println(it)
}
}
data class BestMinimumValue(
val compareValue: Boolean
)
實際輸出
BestMinimumValue(compareValue=false)
BestMinimumValue(compareValue=true)
BestMinimumValue(compareValue=true)
BestMinimumValue(compareValue=true)
BestMinimumValue(compareValue=true)
我會解釋我需要什么。在我的串列中, 3.46是最小值,所以在那個地方我需要標志為true而其他標志為false。
預期產出
BestMinimumValue(compareValue=false)
BestMinimumValue(compareValue=false)
BestMinimumValue(compareValue=false)
BestMinimumValue(compareValue=false)
BestMinimumValue(compareValue=true)
uj5u.com熱心網友回復:
迭代時不可能創建結果串列,因為我們無法知道當前項是否是最小的一項。我們必須至少迭代兩次:首先搜索最小值,然后創建一個結果串列。
一種解決方案是找到最小值,然后將專案與其進行比較:
val min = list.minOrNull()!!
val minValue = list.map { BestMinimumValue(it == min) }
注意如果有多個相同的最小值,那么它們都將被標記為true。
如果這不是預期的行為,或者如果我們想避免兩次比較專案,那么我們可以找到最小值的索引并用它構造結果串列:
val minIndex = list.withIndex().minByOrNull { it.value }!!.index
val minValue = List(list.size) { BestMinimumValue(it == minIndex) }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/430680.html
標籤:科特林
上一篇:如何在kotlin中簡化此代碼?
