当前位置: 首页 > 面试题库 >

如何在Swift中访问深度嵌套的字典

秦宏盛
2023-03-14
问题内容

我的应用程序中有一个非常复杂的数据结构,需要对其进行操作。我试图跟踪玩家在他们的花园中有多少种错误。有十种错误,每种错误都有十种模式,每种模式都有十种颜色。所以可能有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


 类似资料:
  • 问题内容: 我正在用Go编写一个websocket客户端。我正在从服务器接收以下JSON: 我正在尝试访问该参数,但无法掌握如何深入了解接口类型: 显然是错误的,因为这种表示法是不正确的: 我只是找不到一种方法来挖掘地图以获取深层嵌套的键和值。 一旦可以克服动态值,我便想声明这些消息。我将如何编写类型结构来表示这种复杂的数据结构? 问题答案: 您解码成的部分将与该字段的类型匹配。因此,在这种情况下

  • 问题内容: 我有一本包含字典的字典,其中可能还包含字典,例如 目前,我正在打开包装以获取ID 001的“开单至”,“交易参考” a1,如下所示: 我忍不住觉得这有点笨拙,尤其是最后两行-我觉得以下内容应该可以工作: 有没有一种更简单的方法可以向下钻取嵌套字典而不必解压缩临时变量? 问题答案: 实际有效。是表示的表达式,因此您可以在其中进行查找。对于实际程序,我更喜欢使用面向对象的方法来嵌套字典。对

  • 问题内容: 我正在构建一些Python代码来读取和操作深层嵌套的dict(最终是为了与JSON服务进行交互,但是,将其用于其他用途将非常有用)我正在寻找一种方法,可以轻松地在内部深层读取/设置/更新值dict,不需要很多代码。 @另请参阅Python:通过属性以及索引访问来递归访问dict?-Curt Hagenlocher的“ DotDictify”解决方案非常雄辩。我也喜欢Ben Alman在

  • 问题内容: 我有一个Java的HashMap,其内容(大家可能都知道)可以由 如果在另一个HashMap中有一个HashMap,即嵌套的HashMap,我将如何访问内容?我可以这样做吗,内联: 谢谢。 问题答案: 您可以像假设的那样进行操作。但是您的HashMap必须模板化: 否则,从第一张地图检索第二张地图后,您必须进行强制转换。

  • 问题内容: 我是python的新手,需要帮助解决问题: 我有像这样的字典 除了做其他事情,我们还有其他方法可以获取三个价值吗? ? 问题答案: 您可以在每个字典上使用get()。确保已为每个访问添加了“无”检查。

  • {“_index”:“pie”,“_type”:“flare”,“_id”:“2”,“_version”:1,“_score”:1,“_source”:{“id”:2,“父级”:1,“data”:{“memory”:50}}}