让我们说我有以下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
答案 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”解决方案都会非常感激。