对会员' +'的模棱两可的提及

时间:2016-11-07 23:38:27

标签: arrays swift sorting

我有一个浮点数组,我想找到最多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

上面的行对应给出错误对成员' +'

的歧义引用

2 个答案:

答案 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
}