Chaînage de map, filter, reduce
Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 26 sur 56.
La véritable puissance de ces trois méthodes réside dans leur composition. Chaque étape transforme les données et les transmet à la suivante.
let nums = [1, 2, 3, 4, 5, 6]
let result = nums
.filter { $0 % 2 == 0 } // [2, 4, 6]
.map { $0 * $0 } // [4, 16, 36]
.reduce(0, +) // 56
print(result) // 56Lecture de haut en bas : conserver les nombres pairs, les mettre au carré, puis additionner les carrés. Chaque étape correspond à une action évidente, et la chaîne reste lisible même lorsqu’elle s’allonge.
Cette structure de pipeline remplace une boucle écrite manuellement par une intention explicite. filter signifie « sélectionner ». map signifie « transformer ». reduce signifie « réduire ».
On peut parcourir la chaîne et voir ce qui se passe sans suivre les variables d’index.
Une règle simple : l’ordre compte. Effectuer le filtrage avant le mappage demande moins de travail que l’inverse lorsque le filtre est sélectif.
Défi
MoyenLisez une seule ligne d’entrée : une liste de paires price:quantity séparées par des virgules. Par exemple, 3:2,5:1,2:4,7:0 représente quatre commandes.
Pour chaque commande avec quantity > 0, le total de la ligne est price * quantity. Affichez trois lignes :
- Les totaux des lignes (uniquement pour les commandes avec
quantity > 0), joints par, - Le total général de ces totaux de lignes
- Le nombre de commandes prises en compte (c’est-à-dire celles dont la quantité est supérieure à zéro)
Construisez le pipeline avec filter suivi de map, puis dérivez le nombre et la somme à partir du résultat.
Pour l’entrée 3:2,5:1,2:4,7:0, la sortie est :
6,5,8
19
3Essayez vous-même
let orders = readLine()!.components(separatedBy: ",").map { pair -> (Int, Int) in
let parts = pair.components(separatedBy: ":")
return (Int(parts[0])!, Int(parts[1])!)
}
// TODO: filtrer quantity > 0, mapper vers les totaux de ligne ; imprimer joined, sum, count
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 motsEntraînez-vous par vous-même : Playground Swift