gpt4 book ai didi

arrays - 如何在 Swift 中获取两个给定索引之间数组中值的平均值

转载 作者:行者123 更新时间:2023-11-28 11:35:05 24 4
gpt4 key购买 nike

我正在尝试获取数组中两个索引之间的值的平均值。我首先提出的解决方案是将数组缩小到所需的范围,然后再将值的总和除以值的数量。简化版本如下所示:

let array = [0, 2, 4, 6, 8, 10, 12]
// The aim is to take the average of the values between array[n] and array[.count - 1].

我尝试使用以下代码:

 func avgOf(x: Int) throws -> String {

let avgforx = solveList.count - x

// Error handling to check if x in average of x does not overstep bounds
guard avgforx > 0 else {
throw FuncError.avgNotPossible
}

solveList.removeSubrange(ClosedRange(uncheckedBounds: (lower: 0, upper: avgforx - 1)))
let avgx = (solveList.reduce(0, +)) / Double(x)

// Rounding
let roundedAvgOfX = (avgx * 1000).rounded() / 1000
print(roundedAvgOfX)
return "\(roundedAvgOfX)"
}

其中 avgforx 用于表示下限:

array[(.count - 1) - x])

guard 语句确保如果索引超出范围,错误将得到正确处理。

solveList.removeSubrange 是我最初的解决方案,因为它删除了所需索引范围之外的值(并随后提供了所需的结果),但事实证明这是有问题的,因为平均值中未采用的值应该保留。removeSubrange 中的行基本上采用所需的索引字段(例如 array[5] 到 array[10]),删除从 array[0] 到 array[4] 的所有值,然后取结果数组的总和除以元素的数量。相反,array[0] 到 array[4] 中的值应该保留。

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

( swift 4,Xcode 10)

最佳答案

除了原始数组被修改之外,您的代码中的错误是它将剩余元素的总和除以已删除元素的计数 (x) 而不是除以剩余元素的数量。

更好的方法可能是定义一个函数来计算 collection 整数的平均值:

func average<C: Collection>(of c: C) -> Double where C.Element == Int {
precondition(!c.isEmpty, "Cannot compute average of empty collection")
return Double(c.reduce(0, +))/Double(c.count)
}

现在您可以将它与切片一起使用,而无需修改原始数组:

let array = [0, 2, 4, 6, 8, 10, 12]
let avg1 = average(of: array[3...]) // Average from index 3 to the end
let avg2 = average(of: array[2...4]) // Average from index 2 to 4
let avg3 = average(of: array[..<5]) // Average of first 5 elements

关于arrays - 如何在 Swift 中获取两个给定索引之间数组中值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55617653/

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