Swift:使用for-in循环,找到一个Int数组中的最大值

Swift: Using a for-in loop, find the largest value in an Int array

抱歉各位,我是新来的,我正在学习 iOS 从头开始​​开发。

我知道为了找到 Int 数组中的最大值,我们可以使用属性“.max()”。但是我需要使用 for-in 循环来做到这一点。有人可以帮助我吗?我知道这很容易,但我找不到它,也不知道如何自己做。谢谢

好吧,Swift 的 array.max() 的复杂度是 O(N),就像 for-in 循环一样。

在Swift中for-in有两种方法。

第一个解决方案(for-in 这里像每个值)

let arr = [1, 4, 3]
var max = Int.min

// get each value
for val in arr {
    if (max < val) {
        max = val
    }
}

第二种解法(for-in这里针对每个索引)

let arr = [1, 4, 3]
var max = Int.min

// get each index
for i in 0..<arr.count {
    if (max < arr[i]) {
        max = arr[i]
    }
}

两种方式输出相同。在您的进一步代码中选择使用哪个时请随意。

如果您的数组为空,则返回 Int.min 作为最大值是不正确的。

返回可选值更正确:

var max: Int? = nil

for val in arr {
    guard let maxSoFar = max else {
        max = val
        continue
    }

    if val > maxSoFar {
        max = val
    }
}

尽管您可能更愿意将其写为 Collection 的扩展,例如:

extension Collection where Element: Comparable {
    func mMax() -> Element? {
        var max: Element? = nil

        // get each value
        for val in self {
            guard let maxSoFar = max else {
                max = val
                continue
            }

            if val > maxSoFar {
                max = val
            }
        }

        return max
    }

}

[1, 2, 3].mMax() // 3

([] as [Int]).mMax() // nil

["a", "c", "b"].mMax() // "c"

或者更一般地说,它与“>”功能无关,例如:

extension Collection {
    func mMax(by compare: (Element, Element) -> Bool) -> Element? {
        var max: Element? = nil

        // get each value
        for val in self {
            guard let maxSoFar = max else {
                max = val
                continue
            }

            if compare(val, maxSoFar) {
                max = val
            }
        }

        return max
    }

}

[1, 2, 3].mMax(by: >) // 3

([] as [Int]).mMax(by: >) // nil


let longestString = ["aaa", "a", "aaaaa"].mMax(by: { [=12=].count > .count })  /// "aaaaa"