如何从数组上删除重复对象swift?



我有这样一个数组:

[
{
"name": "Daniel",
"points": 10,
},
{
"name": "Ana",
"points": 20
},
{
"name": "Daniel",
"points": 40
}
]

我想删除一个&;daniel &;并指向所有同名字符的和,如下所示:

[
{
"name": "Daniel",
"points": 50,
},
{
"name": "Ana",
"points": 20
}
]

我如何转换它?

我正在尝试白色两个按钮:

for name in persons {
for name2 in persons {
if name == name2 {
//remove the duplicate one and sum his points
}
}

}

但是也许还有比这个更简单的方法

一种可能的解决方案是将Dictionary(grouping:by:)mapValues分组为点的和。

结果字典[<name>:<points>]可以重新映射到Person实例

struct Person  {
let name: String
let points: Int
}
let people = [
Person(name: "Daniel", points: 10),
Person(name: "Ana", points: 20),
Person(name: "Daniel", points: 40),
]
let result = Dictionary(grouping: people, by: .name)
.mapValues{ $0.reduce(0, {$0 + $1.points})} // ["Daniel":50, "Ana":20]
.map(Person.init)
print(result) // [Person(name: "Daniel", points: 50), Person(name: "Ana", points: 20)]

最新更新