我有一个称为Offer的结构,如下所示。我需要使用reduce和/或map添加“报价”提供的数组中存在的所有金额。请帮助我。
public struct Offering: Codable {
public let company: String
public let amount: Int
public let location: String
}
var offerings = [Offering]()
答案 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了解更多详细信息。