Menu
Coddy logo textTech

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)                    // 56

Lecture 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.

challenge icon

Défi

Moyen

Lisez 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 :

  1. Les totaux des lignes (uniquement pour les commandes avec quantity > 0), joints par ,
  2. Le total général de ces totaux de lignes
  3. 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
3

Essayez 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
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Swift