map og compactMap
Transformer elementer og fjern nil-verdier.
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 droppedmap 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, +)) // 49Kombinere 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 inputelementercompactMap— transformer og fjernnil; 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.
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
- map og compactMap
- filter og predikater
- reduce og reduce(into:)
- flatMap og kjeding