Swift中如何合并数组内id和title相同的Project对象并拼接其role参数
你现有代码出现重复拼接的核心原因是使用了两层循环遍历相同的数组,所有ID相同的元素会两两匹配,包括元素自身和自己匹配、两个元素正反两次匹配,因此会生成大量重复的拼接结果。
可以通过分组聚合的逻辑实现需求,先把id和title都相同的项目归为一组,再把同组的role拼接起来,参考代码如下:
struct Project: Identifiable { var id: String var title: String var role: String } var myProjects = [Project(id: "1", title: "Sunset", role: "2nd AD"), Project(id: "2", title: "Lights", role: "Mix Tech"), Project(id: "2", title: "Lights", role: "Sound Mixer"), Project(id: "3", title: "Beach", role: "Producer")] // 用字典分组,key为id+title的组合标识,保证id和title都相同才会被分到同一组 let groups = Dictionary(grouping: myProjects) { "\($0.id)_\($0.title)" } // 遍历分组生成最终结果 var updatedProjects: [Project] = groups.map { _, projects in // 拼接同组所有role let combinedRole = projects.map(\.role).joined(separator: " & ") // 同组id和title一致,取第一个即可 return Project(id: projects.first!.id, title: projects.first!.title, role: combinedRole) } // 保持和原数组一致的ID升序顺序 updatedProjects.sort { $0.id < $1.id } print(updatedProjects) // 输出结果与预期完全一致
内容的提问来源于stack exchange,提问作者Nadia Siddiqah
相关产品推荐
相关产品推荐

