我有一组双精度数组。例如:

let mceGain = [[3,4,5],[7,4,3],[12,10,7]] // Written as integers for simplicity here

现在我想用相应的索引对不同数组中的元素进行平均。所以我的输出看起来像这样:
//firstAvg: (3+7+12)/3 = 7.33
//secondAvg: (4+4+10)/3 = 6
//thirdAvg: (5+3+7)/3 = 5

最后,我想将这些平均值存储在一个简单的数组中:
//mceGain: [7.33,6,5]

我尝试用一个包含switch语句的double for循环来完成这项工作,但这似乎不必要地复杂。我假设同样的结果也可以通过结合使用reduce()map()filter()来实现,但我似乎无法将我的头绕在它周围。

最佳答案

这应该能回答你下面的评论

let elms: [[Double]] = [[3, 5, 3], [4, 4, 10] , [5, 3, 7]]

func averageByIndex(elms:[[Double]]) -> [Double]? {
    guard let length = elms.first?.count else { return []}

    // check all the elements have the same length, otherwise returns nil
    guard !elms.contains(where:{ $0.count != length }) else { return nil }

    return (0..<length).map { index in
        let sum = elms.map { $0[index] }.reduce(0, +)
        return sum / Double(elms.count)
    }
}

if let averages = averageByIndex(elms: elms) {
    print(averages) // [4.0, 4.0, 6.666666666666667]
}

10-04 19:59