web-dev-qa-db-de.com

Schnelles for-in-Wörterbuch-Experiment

Ich bin fast ein kompletter Programmieranfänger und habe ein Swift-eBook von Apple durchgesehen.

Die Dinge, die ich gelesen habe, sind ziemlich klar, aber sobald Sie anfangen zu experimentieren, werden die Dinge schwierig.

Ich stecke bei dem Experiment im Abschnitt Kontrollfluss. Hier ist der ursprüngliche Code:

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

Und hier ist die Aufgabe:

Fügen Sie eine weitere Variable hinzu, um zu verfolgen, welche Art von Zahl die .__ war. größte, sowie was diese größte Zahl war.

Soweit ich verstanden habe, möchte ich, dass ich alle Werte in jeder Zahlenart aufsummiere (eine Gesamtsumme für Prime, Fibonacci und Square erhält) und dann das Ergebnis mit dem größten Ergebnis vergleiche ... __ die Syntax.

Kann jemand Ratschläge geben, wie man dieses Experiment angehen kann? Vielleicht verstehe ich das Problem nicht?

14
al_x13

Sie fordern Sie nur auf, zu verfolgen, zu welcher Nummernkategorie die größte Nummer gehört:

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

Hier vom Spielplatz aus mit Xcode 8.3 und 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)

Optional (25)

0
Gour

Alternativ können Sie die Schließung verwenden, um die Aufgaben zu vereinfachen. 

Die for-Schleife berechnet die Summe jeder Serie.

Die letzte Reduzierung findet die Serie Tuple, die die maximale Anzahl enthält.

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