添加自定义对象数组中存在的整数值

时间:2018-08-28 00:27:22

标签: arrays swift reduce

我有一个称为Offer的结构,如下所示。我需要使用reduce和/或map添加“报价”提供的数组中存在的所有金额。请帮助我。

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

var offerings = [Offering]()

1 个答案:

答案 0 :(得分:1)

这可以通过reduce来完成:

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

$0代表部分结果(即到目前为止已累积的结果),$1是数组中的当前元素。上面的充实版本看起来像:

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

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

您也可以阅读reduce documentation了解更多详细信息。