如何在 Swift 中使用 for in 循环动态更改字典的值?

问题描述 投票:0回答:1
func answersAndResults (answerIndex: Int, link: Dictionary <Int, Int>) {
    if inputIndex == answerIndex {
        for (linkedResult, weight) in link {
            linkedResult += weight // Left side of mutating operator isn't immutable: "linkedResul" is a let costant
        }            
    }
}

如何使用 for in 循环动态更改 of 字典的值?

swift dictionary for-loop
1个回答
2
投票

Swift 字典是值类型,因此当您将它们作为参数传递给函数时,该函数会接收字典的

let
copy。如果您希望该函数修改您传入的原始字典,则必须将其设为
inout
参数。这会将您在函数中所做的任何更改的结果复制回原始字典变量。

要记住的第二点是,在 for 循环中,您还会获得每个键和值的不可变 copy (因为它们是 Int,它们也是值类型,而不是引用类型),因此您需要设置原始字典上的新值,而不仅仅是尝试增加循环内的副本。

结合以上几点,您可以将函数更改为如下所示:

func answersAndResults (answerIndex: Int, link: inout [Int:Int]) {
    if inputIndex == answerIndex {
        for (linkedResult, weight) in link {
            link[linkedResult] == linkedResult + weight
        }
    }
}

另请注意,

[Int:Int]
Dictionary<Int, Int>
的更传统的 Swift 简写。

© www.soinside.com 2019 - 2024. All rights reserved.