如何获取按索引配对的两个单独的 Int 数组的值,然后对某些对进行条件操作?

How to get the values of two seperate Int arrays paired by index and then do conditional operation on certain pairs?

因此,对于我的第一个项目,我一直致力于构建一个高尔夫记分卡应用程序。我有一个数组用于每个球员的 18 洞得分和另一个 class 中的单独数组用于课程标准杆。我可以从总标准杆中减去总分,得到分数 90(+18) 的最终结果。然而,如果所有的洞都有标准杆,但球员只完成了 9 个洞,那么比分将看起来像 45(-27)。默认情况下,玩家得分为 0,所以我正在考虑尝试

zip(playerScoreArray, courseParArray).enumerate().filter() 

我会过滤掉 != 0 的任何 playerScore 洞,将它们加在一起,取每个洞的标准杆并将它们加在一起,然后从 courseParNubers 中减去完成的 playerHoleScores 总数。这将给我一个准确的 + 或 - 仅在他们到目前为止完成的洞上。

我已经使用了 Array.reduce(0, combine +) 但除此之外,我仍在学习更复杂的操作集合和闭包的方法。

我正在尝试完成的示例:

let playerScoreArray = [7, 5, 6, 4, 0, 0, 0, 0, 0]
let holeParArray =     [4, 3, 5, 5, 4, 3, 4, 4, 4]
// get result 7-4, 5-3, 6-5, 4-5 = +5
// currentResult = 22-36 = -14

谢谢

您可以在 reduce 中进行该测试,并且只添加那些玩家分数不为零的测试:

let total = zip(playerScoreArray, holeParArray).reduce(0) { (sum, pair) in
    return pair.0 == 0 ? sum : sum + pair.0 - pair.1
}

或者在调用 reduce 之前过滤掉那些对:

let total = zip(playerScoreArray, holeParArray).filter({ [=11=].0 > 0 }).reduce(0) { (sum, pair) in
    return sum + pair.0 - pair.1
}