考虑以下2D数组:
let array = [ [11, 2, 4], [4, 5, 6], [10, 8, -12] ]
我想要得到的是对角线的总和:
firstDiagnal
secondDiagnal
我可以使用标准for-in循环来实现:
for-in
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和reduce?
map
reduce
要获得第一个和,您需要第i行的第i个元素:
let firstDiag = array.enumerated().map { $1[$0] }.reduce(0, +)
要获得第二个和,您需要相同的东西,但各列相反:
let secondDiag = array.enumerated().map { $1.reversed()[$0] }.reduce(0, +)