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"
抱歉各位,我是新来的,我正在学习 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"