gpt4 book ai didi

swift - 生成包含一个属性的加权平均值和另一个属性的总和的对象

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

我有一个包含值(value)变化信息的类 - 即特定事物在特定时间范围内值(value)变化的数量和百分比。

这个类看起来像这样:

@objc internal final class ValueChange: NSObject {

// MARK: - Internal Properties

internal let timeframe: Timeframe
internal let value: NSDecimalNumber
internal let percentage: NSDecimalNumber
}

我需要一种方法来计算多个这些对象的加权平均值。更具体地说,我需要一个函数,它采用 ValueChange 数组并将值属性相加。应该对百分比属性进行平均,同时考虑值属性(作为权重)。

例如,以下各项的加权平均值:

ValueChange(timeframe: .day, value: 10.0, percentage: 2.5)
ValueChange(timeframe: .day, value: 20.0, percentage: 5.0)

会产生:

ValueChange(timeframe: .day, value: 30.0, percentage: 4.16666667)

我看了一下this answer ,这表明应该使用 zip 函数。不幸的是,此时我对它还很陌生,所以我正在努力了解它如何处理一个对象数组而不是两个数组。

如有任何帮助,我们将不胜感激。

最佳答案

你可以试试这个:

let arrays = [...] // Your ValueChange arrays
let weights:[Double] = arrays.map{ $0.value.doubleValue } // [10, 20]
let percentage:[Double] = arrays.map{ $0.percentage.doubleValue } // [2.5, 5.0]

let percentageResult = zip(percentage, weights).map { $0 * $1 }.reduce(0.0, +) / weights.reduce(0.0, +)
print("test: \(percentageResult)") // Print 4.1666666

zip 函数是从 2 个数组创建一个元组数组(这里它创建元组数组 ([2.5, 5.0], [10, 20]) )。所以当你做 $0 * $1map里面函数,它将产生数组 [2.5 * 10, 5.0 * 20] .

希望这对您有所帮助。

关于swift - 生成包含一个属性的加权平均值和另一个属性的总和的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54848070/

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