将对象列表中的值收集到swift5中的字典中

RXP

我有一个由几个属性组成的Employee对象(Employee对象的数组)列表,我想获取一个包含month和hoursWorked的字典(类似于Java中的哈希映射)。我看了其他帖子,但只找到了一些示例,可以在其中使用map->.map(\.month)而不是两个值来收集项之一

    struct Employee {
      var id: UUID
      var name: String
      var month: Date
      var hoursWorked: Double
      var ...
      var ...
    }

样本数据-Employee对象的数组:

{month: 2019-01, hoursWorked: 256, id:..., name...} 
{month: 2019-02, hoursWorked: 200, id:..., name...}
{month: 2019-03, hoursWorked: 300, id:..., name...}
{month: 2019-04, hoursWorked: 150, id:..., name...}
{month: 2019-05, hoursWorked: 100, id:..., name...}
{month: 2019-06, hoursWorked: 220, id:..., name...}
.
.
.

预期结果:由月和时数组成的字典:

[2019-01: 256.0]
[2019-02: 200.0]
[2019-03: 300.0]
[2019-04: 150.0]
[2019-05: 100.0]
[2019-06: 220.0]

...

实现此目的的一种方法是遍历Employee数组,并将工作的月份和小时收集到Swift字典中(Swift字典中的Date:Double)(类似于Java中的哈希映射)。我想知道在Swift中是否有更好/更简单(也许更快)的方法来完成此任务。

谢谢!

查理塔

您可以reduce(into:_:)为此使用功能:

let dictionary = emplyees.reduce(into: [Date: Double]()) { (result, employee) in
    result[employee.month, default: 0] += employee.hoursWorked
}

这将创建一个字典[Date: Double]该字典将月份作为关键,并将该月的总工作小时数作为值。

更新:要返回一个元组数组,您需要做一些额外的工作:

let dictionary = emplyees.reduce(into: [(month: Date, hours: Double)]()) { (result, employee) in
    if let index = result.firstIndex(where: { $0.month == employee.month }) {
        result[index].hours += employee.hoursWorked
    } else {
        result.append((month: employee.month, hours: employee.hoursWorked))
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将对象流收集到 Map 中

如何在Swift 5中从自定义对象将所有元素收集到数组

Java流将对象列表收集到存储桶

将可迭代对象收集到一个变量中(列表)

Java的8过滤+收集到列表中的NullPointerException

递归搜索记录属性并收集到Haskell的列表中

如何将Iterator值收集到50个元素的列表中

处理列表流并仅使用非空值收集到map / ImmutableMap中

使用遞歸,計算列表中相同元素的數量並將其收集到字典中

使用VBA收集到Excel中的VBA值

如何将HashMap的值收集到向量中?

如何将名称和存储在模型中的值收集到C#MVC中的列表中

將字典中元組的第二個對象收集到列表中的最pythonic方法是什麼

将输入收集到数组中

在输出每个列表之前,解析文本文件并将文本收集到列表对象中

Apache Spark按DF分组,将值收集到列表中,然后按列表分组

通过其值过滤Map对象,而无需将结果收集到另一个map中

如何将存储在模型中的名称和值收集到字典中,最后将这些单独的变量合并到c#mvc中

将 JSON 文件中的所有元素收集到一个列表中

如何根据熊猫中的关系列将ID收集到列表中

將分組輸出收集到 dplyr 中的命名列表中

批量收集到一个UNION查询到对象表中

如何使用Java流将多个列表收集到一个列表中?

如何将 int 列表收集到 Java 8 中的条目列表

如何访问彼此嵌套的多层词典和列表,并将它们收集到列表中

角度可观察对象以及如何遍历对象数组以将字段收集到数组中

React将对象渲染到列表中

如何根据 id 将对象列表分组到列表字典中

如何将通道中的值收集到 Go 中的切片中?