Dictionary 用于循环字典实验的Swift

Dictionary 用于循环字典实验的Swift,dictionary,swift,control-flow,for-in-loop,Dictionary,Swift,Control Flow,For In Loop,我几乎是一个完全的编程初学者,我已经开始阅读苹果公司的一本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 (ki

我几乎是一个完全的编程初学者,我已经开始阅读苹果公司的一本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
任务如下:

添加另一个变量以跟踪使用的是哪种类型的数字 最大的,以及最大的数字是多少

据我所知,他们希望我将每种数字类型的所有值相加(得到素数、斐波那契数和平方数的总和),然后比较结果以显示最大的结果。 但我搞不懂语法

有人能分享一些关于如何处理这个实验的建议吗?
也许我不理解这个问题?

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

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)
let interestingNumbers=[
“素数”:[2,3,5,7,11,13],
“斐波那契”:[1,1,2,3,5,8],
“正方形”:[1,4,9,16,25],
]
var sums=Array()
对于感兴趣的数字(种类、数字){
总和=总和+[(种类,数字。减少(0,+)]
}
设maxSeries=sums.reduce((“”,Int.min),{$0.1>$1.1?$0:$1})
println(总数)
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)

它似乎要求您只记录最大的数字的类型(您已经在跟踪最大的数字是什么,这就是
最大的
变量的用途)。这是一个重复的感谢问题!我似乎误解了这个问题。你能帮我理解事件的正确流程吗:1。代码遍历所有类别中的所有数字,2。它找到了最大的数字,3。它记录的种类最多。我说得对吗?是的,没错。当它遍历所有的数字时,它不断地将值重新分配给最大/最大类。例如,它首先看到2,并指定最大=2,largestKind=“Prime”。然后它看到3,因为它更大,所以它重新分配最大=3,largestKind=“Prime”。任务是找到最大的数字。不是求和。@jewirth-引用OP的话:“据我所知,他们希望我将每种数字类型的所有值相加(得到素数、斐波那契数和平方数的总和),然后比较结果以显示最大的结果。但我无法理解语法。”OP误解了实际任务:-)