首页 > 解决方案 > 添加存在于自定义对象数组中的整数值

问题描述

我有一个名为 Offering 的结构,如下所示。我需要使用 reduce 和/或 map 添加提供“产品”数组中的所有数量。请帮我。

public struct Offering: Codable {
    public let company: String
    public let amount: Int
    public let location: String
}

var offerings = [Offering]()

标签: arraysswiftreduce

解决方案


这可以reduce在单行中完成:

let sum = offerings.reduce(0, { $0 + $1.amount })

$0表示部分结果(即到目前为止已累积的结果)并且$1是 Array 中的当前元素。上述内容的充实版本如下所示:

let sum: Int = offerings.reduce(0, { (sum: Int, element: Offering) -> Int in
    return sum + element.amount
})

本质上,闭包是在数组中的每个元素上调用的。您的“累加器”值最初设置为您传递的第一个参数(initialResult; 在本例中为0),然后作为第一个参数公开给您传递的闭包。闭包还接收数组中的下一个元素作为第二个参数,闭包的返回值是nextPartialResult(即,“累加器”随后设置的值)。使用数组的每个元素调用闭包,每次更新部分结果并传递到下一次调用。

您还可以阅读reduce文档以获取更多详细信息。


推荐阅读