如何从字典数组提取键值对并生成指定格式员工信息
嘿,我来帮你搞定这两个Swift字典数组的问题~
1. 如何从字典数组中提取键值对?
在Swift里,提取字典数组的键值对有几种常用方式,看你需求来选:
- 嵌套循环遍历:最直接的方式,先遍历数组里的每个字典,再遍历字典的键值对:
let dictArray: [[String: Any]] = [["name": "Alice"], ["age": 30]] for dict in dictArray { for (key, value) in dict { print("\(key): \(value)") } }
- 用高阶函数整理成统一数组:如果想把所有键值对收集到一个数组里,可以用
flatMap:
let allKeyValuePairs = dictArray.flatMap { $0 } // allKeyValuePairs 是 [(String, Any)] 类型,包含数组中所有字典的键值对
- 提取指定键的值:如果只关心某个特定键的值,直接遍历数组+字典取值就行:
let names = dictArray.compactMap { $0["name"] as? String } // names 会是 ["Alice"] 这样的字符串数组
2. 针对给定代码生成指定字符串
要生成Jane Doe (ID: 243) earns $58000.0 (including commission)这个字符串,我们需要补全代码里的TODO部分,再修改遍历逻辑。下面是完整的修改后的代码:
let empIDKey = "EmpID" let nameKey = "Name" let payKey = "PayRate" // 补全佣金对应的键 let commissionKey = "Commission" // Create employees var emp1 = Dictionary<String, Any>() emp1[empIDKey] = 137 emp1[nameKey] = "John Doe" emp1[payKey] = 35000.00 var emp2 = Dictionary<String, Any>() emp2[empIDKey] = 243 emp2[nameKey] = "Jane Doe" emp2[payKey] = 50000.00 // 补全emp2的佣金(50000+8000=58000,对应目标字符串的总薪资) emp2[commissionKey] = 8000.00 // Add employees to a list var employees = [Dictionary<String, Any>]() employees.append(emp1) employees.append(emp2) // 修改遍历逻辑,生成目标格式的字符串 for person in employees { // 安全提取字段,避免类型不匹配或缺失导致崩溃 guard let id = person[empIDKey] as? Int, let name = person[nameKey] as? String, let basePay = person[payKey] as? Double else { continue // 如果字段有问题,跳过这个员工 } // 计算总薪资:基础薪资+佣金(没有佣金的话按0算) let commission = person[commissionKey] as? Double ?? 0.0 let totalPay = basePay + commission // 拼接成要求的字符串 let employeeInfo = "\(name) (ID: \(id)) earns $\(totalPay) (including commission)" // 打印结果,emp2会输出你要的目标字符串 print(employeeInfo) }
关键说明:
- 用
guard let做类型转换和可选值绑定,这是Swift里处理字典取值的安全做法,避免崩溃; - 佣金字段是可选的,所以用
?? 0.0做默认值处理,保证没有佣金的员工也能正常计算总薪资; - 严格按照目标格式拼接字符串,确保输出符合要求。
内容的提问来源于stack exchange,提问作者Mayowa Paul
相关产品推荐
相关产品推荐

