如何快速从浮点数数组中获取前2个最大值?

Aru*_*n K 1 arrays ios swift

我需要从一个浮点数数组中获得2个最大值,即一个最高和一秒钟的最高值。是否有任何简单的方法来获取它们的索引,或者是否需要为此更改数组的结构?

Nav*_*H S 5

只需对数组排序并取所需值

var array1 = [2.1, 2.2, 2.5, 3.0, 4.2, 2]

var array2 = array1.sort(){ $0 > $1}

//One way 
let firstMax = array2[0]
let secondMax = array2[1]

//Second way
let firstMax = array2.removeFirst()
let secondMax = array2.removeFirst()
Run Code Online (Sandbox Code Playgroud)

编辑

如果您想要索引,只需像

let maxPos = array1.indexOf(firstMax)
let secMaxPos = array1.indexOf(secondMax)
Run Code Online (Sandbox Code Playgroud)

如果您对这些事情感到困惑,请遵循以下常规知识。

var max = -1.0, maxPos = -1, secMax = -1.0, secMaxPos = -1
for (index, value) in array1.enumerate() {
    if value > max {
        max = value
        maxPos = index
    } else if value > secMax {
        secMax = value
        secMaxPos = index
    }
}
print("max:\(max)->pos:\(maxPos)::secMax:\(secMax)->secMaxPos:\(secMaxPos)") 
Run Code Online (Sandbox Code Playgroud)