我有一个成对的MutableList,我想减少第一个条目的值,所以我的条件是pass(change):
while(n > 0) {
if(sibice[i].first > 0) {
sum += sibice[i].second
//sibice[i].first-- will not compile
n--
} else i++
}
但是Pair类不允许我这样做,除了创建自己的对之外,还有其他解决方法,为什么会这样呢?
最佳答案
与所有实体一样,可变性也会引起问题。
在您的情况下,您可以使用一对新值更新列表条目。
val newPair = oldPair.copy(first = oldPair.first-1)
或者直接使用长度为2的数组代替
intArrayOf(0, 0)
。因此,您可以直接访问元素。while(n > 0) {
if(sibice[i][0] > 0) {
sum += sibice[i][1]
sibice[i][0]--
n--
} else i++
}
您甚至可以将扩展名
first
和second
定义为IntArray
类型,并像以前一样使用它。val IntArray.second get() = get(1)
var IntArray.first
set(value) = set(0, value)
get() = get(0)
关于kotlin - 为什么Kotlin Pair中的条目不可变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47002406/