我的应用程序中有一个非常复杂的数据结构,需要对其进行操作。我试图跟踪玩家在他们的花园中有多少种错误。有十种错误,每种错误都有十种模式,每种模式都有十种颜色。所以可能有1000个独特的错误,我想追踪玩家每种类型的错误数量。嵌套的字典如下所示:
var colorsDict: [String : Int] var patternsDict: [String : Any] // [String : colorsDict] var bugsDict: [String : Any] // [String : patternsDict]
我没有使用此语法的任何错误或投诉。
当我想增加播放器的错误收集时,请执行以下操作:
bugs["ladybug"]["spotted"]["red"]++
我收到此错误: 字符串不能转换为’DictionaryIndex <字符串,任何>’ ,并且错误的胡萝卜在第一个字符串下。
另一个类似的帖子建议使用“作为任何吗?” 在代码中,但是该职位的OP只有一本很深的字典,所以可以轻松地做到这一点:dict [“ string”] as Any?…
我不确定如何使用多级字典来做到这一点。任何帮助,将不胜感激。
使用字典时,必须记住字典中可能不存在键。因此,字典总是返回可选内容。因此,每次您通过按键访问字典时,都必须按照以下步骤在每个级别上展开包装:
bugsDict["ladybug"]!["spotted"]!["red"]!++
我假设您了解可选内容,但为了清楚起见,如果您100%确信字典中存在键,请使用感叹号,否则最好使用问号:
bugsDict["ladybug"]?["spotted"]?["red"]?++
附录 :这是我在操场上测试的代码:
var colorsDict = [String : Int]() var patternsDict = [String : [String : Int]] () var bugsDict = [String : [String : [String : Int]]] () colorsDict["red"] = 1 patternsDict["spotted"] = colorsDict bugsDict["ladybug"] = patternsDict bugsDict["ladybug"]!["spotted"]!["red"]!++ // Prints 1 bugsDict["ladybug"]!["spotted"]!["red"]!++ // Prints 2 bugsDict["ladybug"]!["spotted"]!["red"]!++ // Prints 3 bugsDict["ladybug"]!["spotted"]!["red"]! // Prints 4