Swift:如果数组的自定义对象元素具有相同的键,则合并它们

Posted

技术标签:

【中文标题】Swift:如果数组的自定义对象元素具有相同的键,则合并它们【英文标题】:Swift: Merge custom object elements of an Array if they have the same key 【发布时间】:2018-04-03 13:28:07 【问题描述】:

我有一个名为Performance 的领域对象类,看起来像这样

class Performance: Object 

@objc dynamic var move = ""
@objc dynamic var score = 0


当我打印 Realm 对象的结果时,我会得到类似这样的结果

 [Performance 
  move = Run;
  score = 3;
, Performance 
  move = Walk;
  score = 3;
, Performance 
  move = Run;
  score = 2;
]

然后我尝试将领域结果转换为一个数组,以便我可以合并具有相同动作的表演并添加他们的分数,以便我可以向用户显示他们的哪个动作得分最高和最低。

我想知道是否有机会将Performance 与相同的移动合并并添加它们的分数,以便数组看起来像这样。

[Performance 
move = Run;
score = 5;
, Performance 
move = Walk;
score = 3;
]

我尝试过一些解决方案,例如 One、two 和 three。

但它们对我的问题并没有真正的帮助。

【问题讨论】:

【参考方案1】:

您可以遍历数组并创建一个以您的移动类型为键的字典。

例如:

var totals: [MoveType: Int] = [:]
for item in performances 
    totals[item.move] = item.score + (totals[item.move] ?? 0)

对于每个项目,这会将分数添加到相关移动类型的字典中,如果它是具有该移动类型的第一个项目,则会创建一个新的字典条目。

【讨论】:

只需使用Dictionary(groupingBy:)

以上是关于Swift:如果数组的自定义对象元素具有相同的键,则合并它们的主要内容,如果未能解决你的问题,请参考以下文章

Javascript中比较两个无序对象数组的自定义实现

如何将数组转换为对象并在此对象Javascript中添加相同的键?

保存不断附加的自定义对象数组

如何获取两个数组相同元素

如何定义具有潜在子元素和属性的属性的自定义 web.config 部分?

如何将从webapi返回的自定义对象数组的HttpResponse响应分配给打字稿角度中相同数组类型的对象?