gpt4 book ai didi

arrays - 使用函数式编程按索引对数组数组中的元素进行平均

转载 作者:可可西里 更新时间:2023-11-01 00:56:26 25 4
gpt4 key购买 nike

我有一个由 double 组组成的数组。例如:

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 语句的双 for 循环来执行此操作,但这似乎不必要地复杂。我假设使用 reduce()map()filter() 的组合可以实现相同的结果,但我似乎无法把我的头围起来。

最佳答案

我们来分析一下你想在这里做什么。您从一组数组开始:

[[3,4,5],[7,4,3],[12,10,7]]

并且您想将每个子数组转换为一个数字:

[7,6,5]

每当遇到这种“将此序列的每个元素转换为其他元素”的情况时,请使用 map

计算平均值时,您需要将一系列事物转化为一个事物。这意味着我们需要reduce

let array: [[Double]] = [[3,4,5],[7,4,3],[12,10,7]]
let result = array.map { $0.reduce(0.0, { $0 + $1 }) / Double($0.count) }

附评论:

let array: [[Double]] = [[3,4,5],[7,4,3],[12,10,7]]
let result = array.map { // transform each element like this:
$0.reduce(0.0, { $0 + $1 }) // sums everything in the sub array up
/ Double($0.count) } // divide by count

编辑:

你需要做的是先“转置”数组,然后做map和reduce:

array[0].indices.map{ index in // these three lines makes the array [[3, 7, 12], [4, 4, 10], [5, 3, 7]]
array.map{ $0[index] }
}
.map { $0.reduce(0.0, { $0 + $1 }) / Double($0.count) }

关于arrays - 使用函数式编程按索引对数组数组中的元素进行平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46528635/

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