Lazy map och filter
Kedja lata transformationer utan mellanliggande arrayer.
Lazy map och filter är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Mellanliggande arrayer
Ivriga kedjor allokerar en ny array mellan varje steg. filter().map() på en stor array bygger två fullständiga arrayer, även om ni kanske bara vill ha några få element.
Den ivriga allokeringen
Här skapas två mellanliggande arrayer:
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]Slå ihop steg med lazy
En lazy-kedja slår ihop operationerna: varje element passerar genom alla steg innan nästa element börjar behandlas, så ingen mellanliggande array allokeras.
En lazy-kedja
Samma logik, utan mellanliggande arrayer:
let nums = Array(1...6)
let result = nums.lazy
.filter { $0 % 2 == 0 }
.map { $0 * 10 }
print(Array(result)) // [20, 40, 60]Flöde element för element
En spårning visar interfolierad körning i stället för stegvis körning:
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]Tidig avslutning sparar arbete
Kombinera en lazy-kedja med first(where:) för att avsluta så snart som möjligt:
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 med prefix
Ta bara de första resultaten från en kostsam transformering:
let squares = (1...).lazy.map { $0 * $0 }
print(Array(squares.prefix(5))) // [1, 4, 9, 16, 25]Räkna överhoppat arbete
En räknare visar hur få element som faktiskt körs:
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 100Lazy compactMap
compactMap har också en lazy-form:
let raw = ["1", "x", "3", "y", "5"]
let first = raw.lazy.compactMap { Int($0) }.first
print(first!) // 1Blanda många steg
Långa, sammanslagna pipelines förblir fria från allokeringar tills de materialiseras:
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]När sammanslagning hjälper mest
Lazy-sammanslagning är en fördel när källan är stor och ni bara behåller en del av resultatet. Om ni ändå förbrukar allt till en array blir besparingen mindre, och eager kan vara lättare att läsa.
let big = Array(1...10_000)
let sample = Array(big.lazy.filter { $0 % 1000 == 0 })
print(sample) // [1000, 2000, ... 10000]Snabbtest
Vad undviker en lazy filter().map()-kedja som en ivrig kedja skapar?
Sammanfattning
Ni har lärt er om lazy-kedjor:
- Ivriga kedjor allokerar en array mellan varje steg
.lazyslår ihop stegen — element för element, utan mellanliggande arrayer- Det passar perfekt ihop med
first(where:)ochprefixför tidig avslutning - Störst fördel: stor källa och delvis förbrukning
Nästa steg: avvägningar mellan lazy och eager.
Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”Lazy map och filter” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Lazy map och filter”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Lazy map och filter”?
Kedja lata transformationer utan mellanliggande arrayer. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Lazy map och filter”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.