map et filter différés
Enchaînez des transformations différées sans tableaux intermédiaires.
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 processedlazy 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 100compactMap 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!) // 1Mé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
.lazyfusionne les étapes — élément par élément, sans intermédiaires- Il s’associe parfaitement à
first(where:)et àprefixpour 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.
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
- La propriété lazy
- map et filter différés
- Compromis entre évaluation différée et immédiate
- Créer des séquences différées personnalisées