You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多层嵌套字典语法疑问:如何用Door数据填充四层嵌套字典?

填充四层嵌套字典的正确Swift语法

我来帮你搞定这个四层嵌套字典的填充问题!首先咱们先明确你的字典结构:[建筑名称: [楼层: [区域范围: [门牌号: Door]]]],这种逐层嵌套的结构需要咱们逐层检查并初始化子字典,避免因为键不存在导致的崩溃或者数据丢失。

第一步:先定义好Door结构体(参考)

首先得确保你的Door类型是可用的,这里给个示例结构体方便后续演示:

struct Door {
    let building: String
    let level: String
    let range: String
    let number: String
    // 其他次要信息,比如门的类型、描述等
    let doorType: String?
}

第二步:单个Door的填充逻辑

假设你已经有一个Door实例,咱们一步步把它塞进doorsMap里:

// 初始化一个示例门数据
let officeDoor = Door(
    building: "行政楼",
    level: "3F",
    range: "东侧区域",
    number: "305",
    doorType: "办公室门"
)

// 1. 获取当前建筑对应的楼层字典,不存在就创建空字典
var levelDictionary = doorsMap[officeDoor.building] ?? [:]
// 2. 获取当前楼层对应的区域字典,不存在就创建空字典
var rangeDictionary = levelDictionary[officeDoor.level] ?? [:]
// 3. 获取当前区域对应的门字典,不存在就创建空字典
var doorDictionary = rangeDictionary[officeDoor.range] ?? [:]
// 4. 把当前门添加到门字典里,用门牌号作为键
doorDictionary[officeDoor.number] = officeDoor

// 5. 把修改后的字典逐层存回上层字典
rangeDictionary[officeDoor.range] = doorDictionary
levelDictionary[officeDoor.level] = rangeDictionary
doorsMap[officeDoor.building] = levelDictionary

第三步:封装成函数批量处理

如果要导入多个Door,直接写重复代码太麻烦,咱们把逻辑封装成一个函数:

func addDoor(to doorsMap: inout [String : [String : [String : [String: Door]]]], door: Door) {
    // 逐层获取或初始化子字典
    var levelDict = doorsMap[door.building] ?? [:]
    var rangeDict = levelDict[door.level] ?? [:]
    var doorDict = rangeDict[door.range] ?? [:]
    
    // 添加门数据
    doorDict[door.number] = door
    
    // 逐层回写
    rangeDict[door.range] = doorDict
    levelDict[door.level] = rangeDict
    doorsMap[door.building] = levelDict
}

// 批量使用示例
let doorsToAdd: [Door] = [officeDoor, meetingRoomDoor, stairDoor]
for door in doorsToAdd {
    addDoor(to: &doorsMap, door: door)
}

小提示

这种写法的核心是利用??空合运算符,当键不存在时自动创建空字典,避免了强制解包!带来的崩溃风险。后续你要填充三个选择器的时候,就可以逐层读取字典的键:比如第一个选择器读doorsMap.keys(所有建筑),选中建筑后第二个选择器读doorsMap[selectedBuilding]?.keys(该建筑的所有楼层),以此类推。

内容的提问来源于stack exchange,提问作者Emil Adz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:27:24