我几乎是一个完整的编程初学者,我已经开始通过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的总和),然后比较结果以显示最大结果。 但我无法弄清楚语法。
有人可以分享有关如何处理此实验的任何建议吗? 也许我不理解这个问题?
答案 0 :(得分:28)
他们只是要求您跟踪最大数字所属的数字类别:
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
答案 1 :(得分:0)
或者,您可以使用闭包来简化任务。
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)
答案 2 :(得分:0)
来自使用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)