Swift for-in循环字典实验

23

我几乎是一个完全的编程初学者,开始阅读苹果公司的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的总和),然后比较结果以显示最大结果。 但我无法弄清楚语法。

有人能分享如何解决这个问题的任何建议吗? 也许我没有理解这个问题?


它似乎要求您仅记录最大数字的类型(您已经跟踪了最大数字是什么,这就是“largest”变量的作用)。 - Greg
1
这是一个重复问题,与https://dev59.com/KGAg5IYBdhLWcg3wBXAR#24060781相同。 - Dennis Zoma
3个回答

45

他们只是要求你记录最大数属于哪个数字类别:

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

谢谢!看来我误解了问题。 - al_x13
你能帮我理解正确的事件流吗?1. 代码迭代所有类别中的所有数字,2. 找到最大的数字,3. 记录最大数字的种类。我的理解正确吗? - al_x13
是的,这是正确的。当它遍历所有数字时,它会不断重新分配最大值/最大种类的值。例如,它首先看到2并将largest = 2,largestKind =“Prime”赋值。然后它看到3,因为它更大,所以重新分配largest = 3,largestKind =“Prime”。 - Dash

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)


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)

3
任务是寻找最大的数字,而不是求和。 - Jens Wirth
1
@jewirth - 引用OP的话:“据我所知,他们希望我将每个数字类型中的所有值相加(为质数、斐波那契数和平方数分别求和),然后比较结果以显示最大结果。但我无法弄清语法。” - Maria Zverina
4
楼主误解了实际任务的意思 :-) - Jens Wirth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接