我有一个浮点数组,我想找到最多3个浮点数的索引并取平均值。例如[20,0,9,17,31],3个最高[31,20,17],对应指数[4,0,3],平均值为3.5
我的代码:
func calcAvgIndex(initialArray:[Float]) -> Float {
var ammendedMaxArray = initialArray.dropFirst(2).sorted().reversed()
let maxThreeValues = Array(ammendedMaxArray.prefix(3))
let indexMaxThreeValues = Array(ammendedMaxArray.prefix(3).indices)
可能是上述行" .indicies"我没有正确使用?
var avgIndexMaxThreeValues = indexMaxThreeValues.reduce(0, +)/3
上面的行对应给出错误对成员' +'
的歧义引用答案 0 :(得分:0)
虽然它需要一个for循环,但这有效。
var floats: [Float] = [20,0,9,17,31]
let n = 3
var tupleArray = [(Int, Float)]()
for i in 0..<floats.count {
tupleArray.append((i, floats[i]))
}
let indices = tupleArray.sorted { return $0.1 > $1.1 }.prefix(n).map { Float($0.0) }
// [4,0,3]
let average = indices.reduce(0, +) / Float(n)
// 2.33333
答案 1 :(得分:0)
所以你有一个Float(s)
let nums: [Float] = [20, 0, 9, 17, 31]
您可以提取3个最大值写入的索引
if nums.count >= 3 {
let bestIndexes = nums
.enumerated()
.sorted { $0.1 > $1.1 }
.map { $0.0 }[0...2]
}
当然,一旦拥有最佳索引,就可以获得相关值的平均值。这是完整的代码
if nums.count >= 3 {
let bestIndexes = nums
.enumerated()
.sorted { $0.1 > $1.1 }
.map { $0.0 }[0...2]
let bestValues = bestIndexes.map { nums[$0] }
let bestAverage = bestValues.reduce(0, +) / Float(bestValues.count)
print(bestAverage) // 22.6667
}