我有一个成对的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++
}

您甚至可以将扩展名firstsecond定义为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/

10-10 19:58