arrays - 添加存在于自定义对象数组中的整数值
问题描述
我有一个名为 Offering 的结构,如下所示。我需要使用 reduce 和/或 map 添加提供“产品”数组中的所有数量。请帮我。
public struct Offering: Codable {
public let company: String
public let amount: Int
public let location: String
}
var offerings = [Offering]()
解决方案
这可以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
文档以获取更多详细信息。
推荐阅读
- compilation - 如何修复 Jmodelica 编译错误?
- php - caldav yahoo:报告忙忙查询导致 500 服务器错误
- python - kmeans 聚类 python
- dart - 如何向 dart js 外观添加扩展
- swift - 为什么视图修饰符不能接受不可变变量?
- apache - 如何从 apache 执行 Windows 身份验证
- javascript - 如何使用 GPU.js 运行此功能?
- c# - EnsureCoreWebView2Async Winform 中的“无效窗口句柄”异常
- javascript - 如何通过编辑此现有代码向图片库添加标题?
- graphviz - 破坏我在 cytoscape 中的视图使我从我的点文件中失去了风格