考虑以下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)
但是,如果我们尝试使用高阶函数会是什么呢?如地图和减少?
要获得第一笔总和,您需要第i行的第i个元素:
let firstDiag = array.enumerated().map { $1[$0] }.reduce(0,+)
要获得第二笔金额,您需要相同的东西,但列相反:
let secondDiag = array.enumerated().map { $1.reversed()[$0] }.reduce(0,+)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。