为什么Kotlin对中的条目不可变?

мај*_*мех 7 kotlin

我有一个Mutable的对应列表,我想减少第一个条目的值,所以我的条件是我的通过(更改):

while(n > 0) {
    if(sibice[i].first > 0) {
        sum += sibice[i].second
        //sibice[i].first-- will not compile
        n--
    } else i++
}
Run Code Online (Sandbox Code Playgroud)

但是Pair类不允许我这样做,除了创建我自己的对之外还有其他任何解决方法,为什么会这样呢?

tyn*_*ynn 6

与所有实体一样,可变性也会引起问题。

您可以使用新的一对值更新列表条目。

val newPair = oldPair.copy(first = oldPair.first-1)
Run Code Online (Sandbox Code Playgroud)

或者直接使用长度为2的数组代替intArrayOf(0, 0)。因此,您可以直接访问元素。

while(n > 0) {
    if(sibice[i][0] > 0) {
        sum += sibice[i][1]
        sibice[i][0]--
        n--
    } else i++
}
Run Code Online (Sandbox Code Playgroud)

你甚至可以定义扩展值firstsecondIntArray类型,并用它同样像以前一样。

val IntArray.second get() = get(1)
var IntArray.first
    set(value) = set(0, value)
    get() = get(0)
Run Code Online (Sandbox Code Playgroud)