Swift Academy · Leçon

map et filter différés

Enchaînez des transformations différées sans tableaux intermédiaires.

Leçon 2 sur 413 étapes

map et filter différés est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Tableaux intermédiaires

Les chaînes immédiates allouent un nouveau tableau entre chaque étape. filter().map() appliqué à un grand tableau construit deux tableaux complets, même si vous ne souhaitez finalement que quelques éléments.

L’allocation immédiate

Deux tableaux intermédiaires sont créés ici :

let nums = Array(1...6)
let result = nums
    .filter { $0 % 2 == 0 }  // builds [2, 4, 6]
    .map { $0 * 10 }         // builds [20, 40, 60]
print(result)  // [20, 40, 60]

Fusionner les étapes avec lazy

Une chaîne différée fusionne les opérations : chaque élément traverse toutes les étapes avant que l’élément suivant ne commence, de sorte qu’aucun tableau intermédiaire n’est jamais alloué.

Une chaîne différée

Même logique, aucun tableau intermédiaire :

let nums = Array(1...6)
let result = nums.lazy
    .filter { $0 % 2 == 0 }
    .map { $0 * 10 }
print(Array(result))  // [20, 40, 60]

Parcours élément par élément

Le suivi de l’exécution montre une exécution entrelacée plutôt qu’une exécution étape par étape :

let out = [1, 2, 3].lazy
    .filter { n -> Bool in print("filter \(n)"); return n > 1 }
    .map   { n -> Int  in print("map \(n)");    return n }
print(Array(out))  // filter 1, filter 2, map 2, filter 3, map 3 -> [2, 3]

La sortie anticipée économise du travail

Combinez une chaîne différée avec first(where:) pour vous arrêter dès que possible :

let nums = Array(1...1_000_000)
let hit = nums.lazy.map { $0 + 1 }.first { $0 > 5 }
print(hit!)  // 6  -- only a handful of elements processed

lazy avec prefix

Ne prenez que les premiers résultats d’une transformation coûteuse :

let squares = (1...).lazy.map { $0 * $0 }
print(Array(squares.prefix(5)))  // [1, 4, 9, 16, 25]

Compter le travail évité

Un compteur montre combien peu d’éléments sont effectivement traités :

var transforms = 0
let result = Array(1...100).lazy
    .map { (n: Int) -> Int in transforms += 1; return n * 2 }
    .prefix(3)
_ = Array(result)
print(transforms)  // 3, not 100

compactMap différé

compactMap possède également une forme différée :

let raw = ["1", "x", "3", "y", "5"]
let first = raw.lazy.compactMap { Int($0) }.first
print(first!)  // 1

Mélanger de nombreuses étapes

Les longues chaînes fusionnées n’effectuent aucune allocation jusqu’à leur concrétisation :

let r = Array(1...20).lazy
    .filter { $0 % 2 == 0 }
    .map { $0 * $0 }
    .filter { $0 > 50 }
print(Array(r))  // [64, 100, 144, 196, 256, 324, 400]

Quand la fusion est la plus utile

La fusion différée est avantageuse lorsque la source est volumineuse et que vous ne conservez qu’une partie du résultat. Si vous consommez de toute façon l’ensemble dans un tableau, le gain diminue et le traitement immédiat peut être plus lisible.

let big = Array(1...10_000)
let sample = Array(big.lazy.filter { $0 % 1000 == 0 })
print(sample)  // [1000, 2000, ... 10000]

Vérification rapide

Qu’est-ce qu’une chaîne différée filter().map() évite, contrairement à une chaîne immédiate qui le crée ?

Récapitulatif

Vous avez appris à utiliser les chaînes différées :

  • Les chaînes immédiates allouent un tableau entre chaque étape
  • .lazy fusionne les étapes — élément par élément, sans intermédiaires
  • Il s’associe parfaitement à first(where:) et à prefix pour une sortie anticipée
  • Le gain est maximal avec une source volumineuse et une consommation partielle

Ensuite : les compromis entre traitement différé et immédiat.

Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « map et filter différés » est-elle gratuite ?

Oui — le texte complet de « map et filter différés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « map et filter différés » ?

Enchaînez des transformations différées sans tableaux intermédiaires. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « map et filter différés » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. La propriété lazy
  2. map et filter différés
  3. Compromis entre évaluation différée et immédiate
  4. Créer des séquences différées personnalisées
← Retour à Swift Academy