web-dev-qa-db-ja.com

Swift for-in loop辞書の実験

私はほとんど完全なプログラミング初心者であり、AppleのSwift ebookを読み始めました。

私が読んだものは非常に明確ですが、実験を開始すると物事が難しくなります:)。

「制御フロー」セクションの実験にこだわっています。初期コードは次のとおりです。

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

そして、ここにタスクがあります:

別の変数を追加して、どの種類の数値が最大であったか、およびその最大の数値を追跡します。

私が理解しているように、彼らは各種類のすべての値を加算して(プライム、フィボナッチ、およびスクエアの合計を取得)、結果を比較して最大の結果を表示することを望んでいます。しかし、構文がわかりません。

誰かがこの実験に取り組む方法に関するアドバイスを共有できますか?たぶん私は問題を理解していないのでしょうか?

15
al_x13

彼らは、最大の番号がどの番号カテゴリに属しているかを追跡するようにあなたに求めています:

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
30
Dash

ここでは、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
Gour

または、クロージャを使用してタスクを簡単にすることができます。

forループは、各シリーズの合計を計算します。

最後のリデュースは、最大数を含むシリーズタプルを見つけます。

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)
0
Maria Zverina