查找数组的最小或最大元素

Version = 2.2

你可以使用 minElement()maxElement() 方法查找给定序列中的最小或最大元素。例如,使用数组:

let numbers = [2, 6, 1, 25, 13, 7, 9]

let minimumNumber = numbers.minElement() // Optional(1)
let maximumNumber = numbers.maxElement() // Optional(25)

Version >= 3.0

从 Swift 3 开始,这些方法分别被重命名为 min()max()

let minimumNumber = numbers.min() // Optional(1)
let maximumNumber = numbers.max() // Optional(25)

这些方法返回的值是可选的, 以反映数组可能为空的事实 - 如果是,则返回 nil

注意:上述方法要求元素符合 Comparable 协议。

使用自定义顺序查找最小或最大元素

你还可以将上述方法与自定义闭包一起使用 ,定义是否应在另一个元素之前对其进行排序,从而允许你在数组中找到元素不一定是 Comparable 的最小或最大元素。

例如,使用向量数组:

struct Vector2 {
    let dx : Double
    let dy : Double
    
    var magnitude : Double {return sqrt(dx*dx+dy*dy)}
}

let vectors = [Vector2(dx: 3, dy: 2), Vector2(dx: 1, dy: 1), Vector2(dx: 2, dy: 2)]

Version = 2.2

// Vector2(dx: 1.0, dy: 1.0)
let lowestMagnitudeVec2 = vectors.minElement { $0.magnitude < $1.magnitude } 

// Vector2(dx: 3.0, dy: 2.0)
let highestMagnitudeVec2 = vectors.maxElement { $0.magnitude < $1.magnitude } 

Version >= 3.0

let lowestMagnitudeVec2 = vectors.min { $0.magnitude < $1.magnitude }
let highestMagnitudeVec2 = vectors.max { $0.magnitude < $1.magnitude }