如何在Swift中找到2d数组中所有元素的总和?

时间:2016-12-22 22:53:12

标签: arrays swift multidimensional-array

让我们说我有以下2d数组:

let my2dArray = [[01, 02, 03, 04],
                 [05, 06, 07, 08],
                 [09, 10, 11, 12],
                 [13, 14, 15, 16]]

获取my2dArray中所有元素总和的最简单方法是什么?

假设输出应为:

01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + 13 + 14 + 15 + 16 = 136

3 个答案:

答案 0 :(得分:3)

还有几种方法可以做到这一点:

let my2darray = [[01, 02, 03, 04],
             [05, 06, 07, 08],
             [09, 10, 11, 12],
             [13, 14, 15, 16]]



let doubleReduced = my2darray.reduce(0, {$1.reduce(0, +) + $0})
let dontForgetFlatmap = my2darray.flatMap{$0}.reduce(0,+)

答案 1 :(得分:2)

一种方法是使用joined()展平数组,然后使用reduce对其求和:

let my2dArray = [[01, 02, 03, 04],
                 [05, 06, 07, 08],
                 [09, 10, 11, 12],
                 [13, 14, 15, 16]]

let result = my2dArray.joined().reduce(0, +)

print(result) // 136

请注意my2dArray.joined()不创建另一个数组,而是创建一个FlattenBidirectionalCollection<Array<Array<Int>>>,允许顺序访问项目,包括前向和后向,但它不会分配新的存储。如果您希望以阵列格式查看它的外观,您当然可以Array(my2dArray.joined())

答案 2 :(得分:1)

我想出了:

非Swifty解决方案(按原样运行,但不是“Swifty”):

localStorage

Swifty Solution(最简单的方法):

var summation = 0

for i in 0..<my2dArray.count {
    for j in 0..<my2dArray[i].count {
        summation += my2dArray[i][j]
    }
}

print(summation) // 136

任何其他效率更高的“Swifty”解决方案都会非常感激。