如何用Swift高阶函数更新字典数组中指定key的取值
用Swift高阶函数修改字典数组中特定Key的取值
没问题,我来帮你搞定这个需求!我们可以通过**map(遍历外层数组)和mapValues**(处理内层字典)这两个高阶函数组合来实现,既不会误改其他Key,也不会凭空新增Key。
实现思路
- 用
map遍历外层数组的每个元素,生成新的数组(避免修改原数据,符合Swift值类型的最佳实践) - 对每个元素中的
currentObject字典,用mapValues遍历其键值对:- 仅当Key为
pan_card且取值为0时,将其改为1 - 其他所有Key的取值保持原样不变
- 仅当Key为
完整代码示例
// 原始数据 let originalData: [[String: Any]] = [ ["currentObject": ["passport": 0, "pan_card": 0, "ration_card": 0], "title": "Documents list"], ["currentObject": ["pan_card": 0, "dl": 0, "voter": 0], "title": "Second Documents list"] ] // 处理逻辑 let updatedData = originalData.map { item in var updatedItem = item // 安全取出currentObject并转换为[String: Int]类型 if var currentObj = updatedItem["currentObject"] as? [String: Int] { // 用mapValues修改指定Key的取值 currentObj = currentObj.mapValues { key, value in key == "pan_card" && value == 0 ? 1 : value } updatedItem["currentObject"] = currentObj } return updatedItem } // 验证结果(可以打印查看) print(updatedData)
代码说明
- 外层
map:遍历原数组的每个字典元素,返回修改后的新字典,最终组成新数组 mapValues:专门用于字典的高阶函数,会遍历字典的所有键值对,返回一个新字典,这里我们只针对pan_card做特殊处理- 类型转换:用
as? [String: Int]做安全转换,避免类型不匹配导致的崩溃
运行这段代码后,updatedData就会完全符合你期望的结果:
[["currentObject": ["passport": 0, "pan_card": 1, "ration_card": 0], "title": "Documents list"], ["currentObject": ["pan_card": 1, "dl": 0, "voter": 0], "title": "Second Documents list"]]
内容的提问来源于stack exchange,提问作者karthikeyan
相关产品推荐
相关产品推荐

