gpt4 book ai didi

arrays - 如何在 Swift 中对元组数组中的相似元组进行平均

转载 作者:搜寻专家 更新时间:2023-11-01 07:21:48 26 4
gpt4 key购买 nike

我真的需要你的帮助。我有一个看起来像这样的元组数组:

[("07-21-2016", 5), ("07-21-2016", 1), ("07-21-2016", 2), ("07-21-2016", 3), ("07-21-2016", 4), ("07-21-2016", 5), ("07-20-2016", 6), ("07-20-2016", 5), ("07-19-2016", 5)]

我需要取出具有相同日期的所有元组并将它们取平均。所以最后它看起来像:

[("07-21-2016", 33.3), ("07-20-2016", 5.5), ("07-19-2016", 5)]

有人知道怎么做吗?

最佳答案

let array = [("07-21-2016", 5), ("07-21-2016", 1), ("07-21-2016", 2), ("07-21-2016", 3), ("07-21-2016", 4), ("07-21-2016", 5), ("07-20-2016", 6), ("07-20-2016", 5), ("07-19-2016", 5)]

// Create dictionary to hold mapping of date to array of values
var dict = [String: [Double]]()

// use forEach to add each value to the array for each key
array.forEach {(date, num) in dict[date] = (dict[date] ?? []) + [Double(num)]}

// use map with reduce to find the average of each value and return a tuple
// containing the date and the average value
let result = dict.map {(date, nums) in (date, nums.reduce(0, combine: +) / Double(nums.count))}

print(result)

输出:

[("07-20-2016", 5.5), ("07-19-2016", 5.0), ("07-21-2016", 3.3333333333333335)]

说明:

array.forEach {(date, num) in dict[date] = (dict[date] ?? []) + [Double(num)]}

forEach 获取数组的每个元组,查找与 dict[date] 对应的值数组并将新的 num 附加到那个数组。如果 dict[date] 返回 nil,那么这是我们第一次看到这个键,所以使用 nil 合并运算符 ?? 返回一个空数组 [] 并将新值附加到该数组。

最后,dict的内容是:

["07-20-2016": [6.0, 5.0], "07-19-2016": [5.0], "07-21-2016": [5.0, 1.0, 2.0, 3.0, 4.0, 5.0]]
let result = dict.map {(date, nums) in (date, nums.reduce(0, combine: +) / Double(nums.count))}

map 应用于字典时,它获取每个 (key, value) 对并基于它创建一个新值。 map 的最终结果是它返回的值的新数组。在这种情况下,map 的每次迭代返回的值是一个元组,其中包含 date 以及与该日期关联的数字的平均值。

nums.reduce(0, combine: +)

这对 nums 数组中的值求和。 reduce 采用初始值(在本例中为 0)和一个闭包,该闭包将针对 nums 数组中的每个值进行评估。 reduce 的每次迭代都采用当前运行总数和 nums 中的下一个值并将它们相加。然后将此总和除以 Double(nums.count) 以产生平均值。最后,map 返回产生最终结果的 (date, avg)

关于arrays - 如何在 Swift 中对元组数组中的相似元组进行平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516942/

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