因此,在我的第一个项目中,我一直在开发一个高尔夫记分卡应用程序。我有一个数组,每个球员18洞得分和一个单独的数组在另一个班级为球场标准。我可以从标准杆总数中减去总分,得到分数90(+18)的最终结果。然而,如果所有的洞都有一个标准杆,但球员只完成了9个洞,比分将看起来是45(-27)。球员的分数在默认情况下是0,所以我想试着去做。
zip(playerScoreArray, courseParArray).enumerate().filter() 在这里,我将过滤掉任何playerScore孔!= 0,将它们相加,取其中每个洞的等价物,并将它们相加,并从courseParNubers中减去完成的全部playerHoleScores。这将给我一个准确的+或-标准,只有他们完成的洞到目前为止。
我使用了Array.reduce(0,组合+),但除此之外,我还在学习操作集合和闭包的更复杂的方法。
我想要完成的事情的例子:
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谢谢
发布于 2016-05-21 14:48:03
您可以在“减缩”中进行该测试,并且只添加那些玩家得分为非零的测试:
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({ $0.0 > 0 }).reduce(0) { (sum, pair) in
return sum + pair.0 - pair.1
}https://stackoverflow.com/questions/37364162
复制相似问题