gpt4 book ai didi

arrays - 如何在二维数组的范围内使用 flatMap() 和 reduce()

转载 作者:行者123 更新时间:2023-12-04 00:15:06 24 4
gpt4 key购买 nike

我有一个 2d 数组,我想使用类似于 flatMap 的东西,并将 reduce 与每个二维的范围一起使用。在我的示例中,我想在 0 到 2 的每一行中添加从位置 1 到 3 的每个数字。

目前我的代码与以下类似,并且确实有效。

let array = [
[3,6,8,4],
[3,7,4,6],
[2,4,5,7],
[5,3,7,4]
]

let row = 1
let col = 2
var reducedValue = 0

(row-1...row+1).forEach {
reducedValue = array[$0][col-1...col+1].compactMap { $0 }.reduce(reducedValue, +)
}

预期的输出是:

51
//6 + 8 + 4 + 7 + 4 + 6 + 4 + 5 + 7

但是我想知道是否有类似于这个的解决方案:

reducedValue = array[row-1...row+1][col-1...col+1].compactMap { $0 }.reduce(0, +)

或者甚至可能没有类似这样的 compactMap:

reducedValue = array[row-1...row+1][col-1...col+1].reduce(0, +)

最佳答案

您可以展平数组数组,然后 reduce 。例如:

let total = array[row-1...row+1]
.flatMap { $0[col-1...col+1] }
.reduce(0, +)

产生:

51


如果您想避免构建扁平数组的开销(除非处理非常大的子数组,即数百万个值,否则这无关紧要),您可以懒惰地执行计算:

let total = array[row-1...row+1]
.lazy
.flatMap { $0[col-1...col+1] }
.reduce(0, +)

关于arrays - 如何在二维数组的范围内使用 flatMap() 和 reduce(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64579310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com