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

如何用Swift高阶函数更新字典数组中指定key的取值

用Swift高阶函数修改字典数组中特定Key的取值

没问题,我来帮你搞定这个需求!我们可以通过**map(遍历外层数组)和mapValues**(处理内层字典)这两个高阶函数组合来实现,既不会误改其他Key,也不会凭空新增Key。

实现思路

  1. 用map遍历外层数组的每个元素,生成新的数组(避免修改原数据,符合Swift值类型的最佳实践)
  2. 对每个元素中的currentObject字典,用mapValues遍历其键值对:
    • 仅当Key为pan_card且取值为0时,将其改为1
    • 其他所有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:36:37