这有点难以解释,但我会尽力而为。我正在尝试正确更新另一个词典中的一个词典。以下代码几乎可以满足我的需求。
var dictionary = Dictionary<String, [Int : Int]>()
func handleStatsValue(tag: Int ) {
let currentValue: Int = dictionary["Score"]?[tag] ?? 0
dictionary["Score"] = [
tag : currentValue + 1
]
}
但是,当tag
值更改时(例如1到2),似乎字典已被覆盖。我需要Dictionary
里面有多个字典。任何提示或建议都将受到感激。
编辑:我正在尝试将多个词典嵌套在一个词典中。似乎只要更改tag
的值,字典就会被覆盖。
答案 0 :(得分:2)
一种写法是:
func handleStatsValue(tag: Int) {
dictionary["Score", default: [:]][tag, default: 0] += 1
}
或者,写成没有[_:default:]
func handleStatsValue(tag: Int) {
var scoreDictionary = dictionary["Score"] ?? [:]
scoreDictionary[tag] = (scoreDictionary[tag] ?? 0) + 1
dictionary["Score"] = scoreDictionary
}
但是,使用嵌套字典来保存数据不是一个好主意。请改用自定义struct
,并尝试避免使用标签:
struct DataModel {
var score: [Int: Int] = [:]
}
答案 1 :(得分:0)
我认为您需要类似的方法来增加现有标签的值,或者添加不存在的新标签
func handleStatsValue(tag: Int ) {
if var innerDict = dictionary["Score"] {
if let value = innerDict[tag] {
innerDict[tag] = value + 1
} else {
innerDict[tag] = 1
}
dictionary["Score"] = innerDict
}
}
尽管代码看起来与硬编码键“ Score”有些奇怪,但最好还是使用多个简单的字典,例如
var score: [Int, Int]()
或者,如果您愿意
var score = Dictionary<Int, Int>()