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

Swift:修改groupingDict中数组内Jack的drink属性值

修改Swift分组字典中Jack的drink属性值

原代码里用Dictionary(grouping:)生成的groupingDict是[String?: [User]]类型——因为User.name是可选字符串,而且User是值类型的结构体,所以直接修改数组里的元素需要先取出实例、修改后再替换回去。下面给出两种可行的修改方式:

方法一:直接定位修改

通过key快速找到Jack对应的用户数组,修改后重新赋值回字典:

// 取出Jack对应的用户数组(可变副本)
if var jackUsers = groupingDict["Jack"] {
    // 遍历数组找到Jack的实例(按name分组后数组里应该只有一个Jack)
    for index in jackUsers.indices {
        if jackUsers[index].name == "Jack" {
            // 结构体是值类型,必须创建可变副本修改属性
            var updatedJack = jackUsers[index]
            updatedJack.drink = "Soda"
            jackUsers[index] = updatedJack
            break // 找到目标后直接退出循环
        }
    }
    // 将修改后的数组放回字典
    groupingDict["Jack"] = jackUsers
}

方法二:遍历字典批量处理

替换你原来的for循环代码,遍历字典时针对性修改:

for (key, var users) in groupingDict {
    if key == "Jack" {
        // 用map生成修改后的用户数组
        users = users.map { user in
            var mutableUser = user
            if mutableUser.name == "Jack" {
                mutableUser.drink = "Soda"
            }
            return mutableUser
        }
        // 把修改后的数组赋值回字典
        groupingDict[key] = users
    }
}

补充说明

  • 因为User是结构体(值类型),无法直接修改数组中元素的属性,必须先创建可变副本,修改后再替换原位置的元素。
  • Dictionary(grouping:)生成的字典值是数组,每个key对应一组同name的用户,示例中每个name仅对应一个用户,所以找到匹配项后即可停止操作。

内容的提问来源于stack exchange,提问作者Lance Samaria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:35:50