gpt4 book ai didi

Swift:从可选中提取值

转载 作者:行者123 更新时间:2023-11-28 09:20:24 25 4
gpt4 key购买 nike

我正在尝试从不同数字序列的字典中获取 largest 和 largestKind。

var largest = 0
var largestKind: String?
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
if largestKind != kind {
largestKind = kind
}
}
}
}
largest
largestKind

如果 largestKind 的前一个值不同,我只想设置 largestKind。我知道这样做几乎没有用,但我只是想更好地感受 Swift。我尝试将 if 语句与 let 一起使用,但我无法让它与条件一起工作。

预先感谢您的帮助。

最佳答案

您可以使用 Optional Binding 从可选值中获取值:

for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
if let oldLargestKind = largestKind {
if oldLargestKind != kind {
largestKind = kind
}
}
else {
// largestKind was nil
largestKind = kind
}
}
}
}

当然,如果您无论如何都分配它,它会更干净并且仍然有效:

for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
largestKind = kind
}
}
}

当然,如果你真的想深入研究 Swift,这是另一个实现:

let (largest, largestKind) = reduce(interestingNumbers, (num: 0, kind: nil)) {
(largest: (num: Int, kind: String?), next: (kind: String, numbers: [Int])) in

func maxNumInArray(array: [Int]) -> Int {
return array.reduce(0, combine: max)
}

var localLargest = maxNumInArray(next.numbers)
return localLargest > largest.num ? (localLargest, next.kind) : largest
}

从可理解性的角度来看,这实际上更糟,但它展示了 Swift 中一些更高级的功能:

  • 嵌套函数
  • 函数式编程功能,如“reduce”,它接受一个序列并通过组合每个元素将其缩减为单个值
  • Tuples带有命名参数
  • 从函数返回多个值
  • 三元运算符

编辑:要在最后访问 largestKind 的展开值:

if let actualLargestKind = largestKind {
// In here you have access to the value stored in
// largestKind under the name of actualLargestKind
doSomethingWithTheLargestKind(actualLargestKind)
}

关于Swift:从可选中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com