ios - Swift 数组运行总计 x 项

标签 ios arrays swift reduce cumulative-sum

Swift 有一个很棒的函数 .reduce,它可以提供整个数组的运行总计:

let array = [1, 2, 3, 4, 5]
let addResult = array.reduce(0) { $0 + $1 }
// addResult is 15

let multiplyResult = array.reduce(1) { $0 * $1 }
// multiplyResult is 120

但是有没有一种简单的方法可以将其用于仅达到特定元素的运行总计?例如,对于 [1, 2, 3, 4, 5] 数组,有没有办法使用 .reduce 函数仅返回最多第三项的运行总计 (1+2+3=6)?

(我知道我总是可以做一个循环,只是尝试快速学习所有可能性)

最佳答案

除了使用数组的 reduce 方法(如 @MartinR 的答案)之外,还可以将全局 reduce 函数与 enumerate 一起使用

enumerate 函数返回一个元组序列,其第一个元素(名为 index)是元素索引,第二个元素(名为 element) ) 是元素值。

因此您可以使用以下代码获得相同的结果:

let sum = reduce(enumerate(array), 0) {
    $0 + ($1.index < 3 ? $1.element : 0)
}

此方法的优点是您可以应用更复杂的规则来排除元素 - 例如,对具有偶数索引的所有元素求和:

let sum = reduce(enumerate(array), 0) {
    $0 + ($1.index % 2 == 0 ? $1.element : 0)
}

关于ios - Swift 数组运行总计 x 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250560/

相关文章:

ios - UITableView选择——多选

ios - 应用内购买收据中 pending_renewal_info 属性的文档或含义?

ios - 如何在值为动态时增加数组的索引(Swift)

ios - AVAssetExportSession、可变格式配置文件、CABAC 和重构

ios - UIViewController 已经设置好,但我想使用 SlackTextViewController

arrays - 将大型 std::vector 导入 Swift 的最有效方法?

php - 将查询结果转换为二维数组

java - 从 JsonObject 中提取所有名称元素

swift - 无论如何,要使用解析将对象保存到另一个用户吗?

swift - 为什么 resignFirstResponder 在 UITextView 上重置 contentOffset?