考虑以下二维数组:
let array = [
[11, 2, 4],
[4, 5, 6],
[10, 8, -12]
]
我想要得到的是对角线的总和:
- As
firstDiagnal
: 11 + 5 + (-12) = 4
- As
secondDiagnal
: 4 + 5 + 10 = 19
我可以使用标准来实现它for-in
loop:
var firstDiagnal = 0
var secondDiagnal = 0
for i in 0..<array.count {
firstDiagnal += array[i][i]
secondDiagnal += array[i][array[i].count - 1 - i]
}
print(firstDiagnal)
print(secondDiagnal)
但是,如果我们尝试使用会怎样?高阶功能?例如map
and reduce
?
要获得第一个总和,您需要第 i 行的第 i 个元素:
let firstDiag = array.enumerated().map { $1[$0] }.reduce(0, +)
要获得第二个总和,您需要相同的东西,但列颠倒了:
let secondDiag = array.enumerated().map { $1.reversed()[$0] }.reduce(0, +)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)