Swift Academy · Lektion

Lazy map och filter

Kedja lata transformationer utan mellanliggande arrayer.

Lektion 2 av 413 steg

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 processed

lazy 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 100

Lazy compactMap

compactMap har också en lazy-form:

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

Blanda 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
  • .lazy slår ihop stegen — element för element, utan mellanliggande arrayer
  • Det passar perfekt ihop med first(where:) och prefix för tidig avslutning
  • Störst fördel: stor källa och delvis förbrukning

Nästa steg: avvägningar mellan lazy och eager.

Gratis att börja

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.

Alla lektioner i den här kursen

  1. Egenskapen lazy
  2. Lazy map och filter
  3. Avvägningar mellan lazy och eager
  4. Bygga anpassade lata sekvenser
← Tillbaka till Swift Academy