Reduce
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 25 sur 56.
reduce réduit un tableau entier en une seule valeur. C'est ainsi que vous additionnez, multipliez, trouvez un extrême ou construisez une nouvelle chaîne ou un nouveau tableau à partir de nombreux éléments.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10Le premier argument est l'accumulateur initial. La closure reçoit l'accumulateur actuel et l'élément suivant, et renvoie le nouvel accumulateur. La valeur finale de l'accumulateur est le résultat.
Pour les opérateurs arithmétiques, Swift vous propose un raccourci basé sur les symboles :
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce n'a pas besoin de retourner un nombre. L'accumulateur peut être de n'importe quel type, c'est vous qui décidez :
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"Défi
FacileLisez une seule ligne d'entrée : une liste d'entiers séparés par des virgules. En utilisant reduce pour chacun, affichez trois lignes :
- La somme
- Le produit
- La valeur maximale (utilisez une fermeture qui renvoie le plus grand des deux arguments, n'appelez pas
.max())
Supposez qu'il y a au moins un élément. Pour le maximum, vous pouvez utiliser nums[0] comme accumulateur initial et réduire le reste du tableau.
Pour l'entrée 3,7,2,8,4, la sortie est :
24
1344
8Aide-mémoire
reduce réduit un tableau en une seule valeur en utilisant un accumulateur initial et une closure :
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10Raccourci pour les opérateurs arithmétiques :
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24L'accumulateur peut être de n'importe quel type :
["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"Pour trouver un maximum en utilisant reduce, utilisez le premier élément comme valeur initiale :
let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }Essayez vous-même
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: somme, produit, max via reduce
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots