web-dev-qa-db-fra.com

Expérience de dictionnaire en boucle rapide

Je suis presque un débutant en programmation et j'ai commencé à lire un livre électronique Swift d'Apple.

Les choses que je lis sont assez claires, mais une fois que vous commencez à expérimenter, les choses deviennent difficiles :).

Je suis coincé avec l'expérience dans la section Flux de contrôle. Voici le code initial:

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

Et voici la tâche:

Ajoutez une autre variable pour savoir quel type de nombre était le le plus grand, ainsi que ce que ce plus grand nombre était.

Si je comprends bien, ils veulent que je fasse la somme de toutes les valeurs de chaque type de nombre (obtenir une somme totale pour Prime, Fibonacci et Square), puis comparer le résultat pour afficher le résultat le plus large . la syntaxe.

Quelqu'un peut-il donner un conseil sur la manière de mener cette expérience? Peut-être que je ne comprends pas le problème?

14
al_x13

Ils vous demandent simplement de savoir à quelle catégorie de numéros appartient le plus grand nombre:

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

Ici depuis un terrain de jeu avec Xcode 8.3 et 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)

En option (25)

0
Gour

Vous pouvez également utiliser la fermeture pour simplifier les tâches. 

La boucle for calcule la somme de chaque série.

La réduction finale trouve la série Tuple contenant le nombre maximum.

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