首页 > 解决方案 > 斯威夫特 4.2/5。获取分配给字典中此键的数组中数字的“键”

问题描述

我的代码实际上有效,但我需要打印分配给包含数字(16 - 这是第二大)的数组的 secondLargest 键。
如何访问此密钥?

let interestingNumbers = ["prime": [2,3,5,7,11,13], "fibonacci": [1,1,2,3,5,8], "square": [1,4,9,16,25]]

var largest = 0;
var secondLargest=0

for (kind, numbers) in interestingNumbers{
    for number in numbers {
        if number>largest {
            secondLargest = largest
            largest = number
        } else if (number > secondLargest && number != largest) {
            secondLargest=number
        }
    }
}
print( "The largest number is: \(largest) ")
print( "The second largest number is: \(secondLargest) and is a\(kind) 
kind ")

标签: swift

解决方案


这是使用forEachmax/的解决方案max(by:)

var largest = 0;
var secondLargest=0
var savedKind = ""
interestingNumbers.forEach { 
    if let max = $0.value.max() {
       if max > largest { largest = max }
       let next = $0.value.max(by: { $0 < $1 && $1 < max }) ?? -1
       if next > secondLargest {
           secondLargest = next
           savedKind = $0.key
       }
    }
}

print( "The largest number is: \(largest) ")
print( "The second largest number is: \(secondLargest) and is a \(savedKind) kind ")

推荐阅读