一尘不染

如何使用高阶函数获得对角线的总和?

algorithm

考虑以下2D数组:

let array = [
                [11, 2, 4],
                [4, 5, 6],
                [10, 8, -12]
            ]

我想要得到的是对角线的总和:

  • firstDiagnal:11 + 5 +(-12)= 4
  • secondDiagnal:4 + 5 + 10 = 19

我可以使用标准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)

但是,如果我们尝试使用 高阶 函数会怎样?如mapreduce


阅读 229

收藏
2020-07-28

共1个答案

一尘不染

要获得第一个和,您需要第i行的第i个元素:

let firstDiag = array.enumerated().map { $1[$0] }.reduce(0, +)

要获得第二个和,您需要相同的东西,但各列相反:

let secondDiag = array.enumerated().map { $1.reversed()[$0] }.reduce(0, +)
2020-07-28