Swift Academy · leksjon

map og compactMap

Transformer elementer og fjern nil-verdier.

Leksjon 1 av 413 trinn

map og compactMap er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Hva er map?

map er en høyereordensfunksjon: Den tar imot en closure og bruker den på hvert element i en sekvens, og returnerer en ny array med de transformerte resultatene.

  • Den opprinnelige samlingen endres aldri
  • Antallet resultater er alltid likt antallet inputelementer
  • Elementtypen kan endres (for eksempel Int → String)

En enkel map

Fordoble hvert tall i en array:

let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled)  // [2, 4, 6, 8]

Endre elementtypen

map kan transformere Int-verdier til String-verdier:

let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels)  // ["ID-10", "ID-20", "ID-30"]

map med en navngitt funksjon

De kan sende inn enhver funksjon med en samsvarende signatur, ikke bare en trailing closure:

let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper)  // ["SWIFT", "MAP"]

Problemet map ikke kan løse

map beholder hvert element. Hvis transformasjonen Deres returnerer en optional (den kan mislykkes), får De en array med optionals, for eksempel [Int?] — full av nil-hull som De må filtrere bort senere.

Det er nettopp dette compactMap løser.

Her kommer compactMap

compactMap transformerer hvert element og fjerner alle resultater som er nil, slik at De får en array uten optionals:

let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums)  // [1, 2, 4]  -- "x" was dropped

map og compactMap side om side

Forskjellen er om nil-resultater beholdes:

let raw = ["1", "x", "3"]
print(raw.map { Int($0) })       // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]

Pakke ut optionals i en samling

compactMap er den idiomatiske måten å fjerne nil-verdier fra en array med optionals på:

let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean)  // [1, 3, 5]

Parsing med compactMap

Et vanlig praktisk bruksområde er å parse bare de gyldige linjene i inputen:

let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values)      // [42, 7]
print(values.reduce(0, +))  // 49

Kombinere map og compactMap

De kan kjede dem sammen: Bruk map til å forme dataene, og compactMap til å beholde bare de vellykkede resultatene:

let scores = ["90", "85", "n/a", "70"]
let passed = scores
    .compactMap { Int($0) }
    .map { $0 >= 80 ? "pass" : "fail" }
print(passed)  // ["pass", "pass", "fail"]

compactMap på optional-kjeder

Det fungerer også svært godt med tilgang til optional-egenskaper:

struct User { let name: String? }
let users = [User(name: "Ann"), User(name: nil), User(name: "Bo")]
let names = users.compactMap { $0.name }
print(names)  // ["Ann", "Bo"]

Kort sjekk

Hvilken funksjon transformerer elementer og fjerner nil-resultater i ett trinn?

Oppsummering

De har lært de to viktigste transformeringsfunksjonene:

  • map — transformer hvert element; antallet resultater er likt antallet inputelementer
  • compactMap — transformer og fjern nil; svært nyttig ved parsing og utpakking av optionals
  • Begge returnerer nye arrayer og endrer aldri kilden
  • Kjed dem sammen for å forme og deretter filtrere data på en ryddig måte

Deretter: filtrering med predikater.

Gratis å komme i gang

Lær deg Swift med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
122
Leksjoner
409

Ofte stilte spørsmål

Er leksjonen «map og compactMap» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «map og compactMap», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «map og compactMap»?

Transformer elementer og fjern nil-verdier. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Swift Academy?

Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «map og compactMap»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?

Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. map og compactMap
  2. filter og predikater
  3. reduce og reduce(into:)
  4. flatMap og kjeding
← Tilbake til Swift Academy