繁体   English   中英

Swift for-in循环字典实验

[英]Swift for-in loop dictionary experiment

我几乎是一个完整的编程初学者,我已经开始通过Apple的Swift电子书。

我读到的东西很清楚,但是一旦你开始尝试,事情变得棘手:)。

我坚持在控制流程部分进行实验。 这是初始代码:

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
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}

largest

这是任务:

添加另一个变量以跟踪哪个数字最大,以及最大数量是多少。

据我了解,他们希望我将每个数字类型的所有值相加(得到Prime,Fibonacci和Square的总和),然后比较结果以显示最大的结果。 但我无法弄清楚语法。

有人可以就如何解决这个实验分享任何建议吗? 也许我不明白这个问题?

他们只是要求您跟踪最大数字所属的数字类别:

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 largestkind = ""
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            largestkind = kind
        }
    }
}
largest
largestkind

或者,您可以使用闭包来简化任务。

for循环计算每个系列的总和。

最终的reduce查找包含最大数字的系列元组。

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]

var sums =  Array<(String, Int)>()
for (kind, numbers) in interestingNumbers {
    sums = sums + [(kind, numbers.reduce(0, +))]
}

let maxSeries = sums.reduce(("", Int.min), { $0.1 > $1.1 ? $0 : $1 })

println(sums)
println(maxSeries)

这是来自使用Xcode 8.3和Swift 3.0的游乐场

let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]

let largest = interestingNumbers.map{$0.value}.flatMap{$0}.max()
print(largest)

可选(25)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM