【问题标题】:Swift for-in loop dictionary experimentSwift for-in 循环字典实验
【发布时间】:2014-07-29 17:19:26
【问题描述】:

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

有人可以分享有关如何解决此实验的任何建议吗? 也许我没有理解这个问题?

【问题讨论】:

标签: dictionary swift control-flow for-in-loop


【解决方案1】:

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

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.代码遍历所有类别中的所有数字,2.找到最大的数字,3.记录的类型最大的数目。我说的对吗?
  • 是的,没错。当它遍历所有数字时,它不断将值重新分配给最大/最大种类。例如,它首先看到 2 并分配最大 = 2,最大种类 =“素数”。然后它看到 3,因为它更大,它重新分配最大 = 3,最大种类 =“素数”。
【解决方案2】:

您也可以使用闭包来简化任务。

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)

【讨论】:

  • 任务是找到最大的数。不是总和。
  • @jewirth - 引用 OP:“据我了解,他们希望我将每种数字类型的所有值相加(得到 Prime、Fibonacci 和 Square 的总和),然后比较结果显示最大的结果。但我无法弄清楚语法。”
  • OP误解了实际任务:-)
【解决方案3】:

这里是使用 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)

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多