Swift Academy · Oppitunti

map ja compactMap

Muunna alkioita ja poista nil-arvot.

Oppitunti 1/413 vaihetta

map ja compactMap on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on map?

map on korkeamman asteen funktio: se ottaa sulkeuman ja soveltaa sitä sekvenssin jokaiseen alkioon. Se palauttaa uuden taulukon muunnetuista tuloksista.

  • Alkuperäistä kokoelmaa ei koskaan muuteta
  • Tulosten määrä on aina sama kuin lähtöaineiston määrä
  • Alkioiden tyyppi voi muuttua (esimerkiksi Int → String)

Yksinkertainen map

Jokaisen taulukon luvun kaksinkertaistaminen:

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

Alkiotyypin muuttaminen

map voi muuntaa Int-arvot String-arvoiksi:

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

map nimetyn funktion kanssa

Voitte välittää minkä tahansa funktion, jonka allekirjoitus vastaa odotettua, etteivät sulkeumat ole ainoa vaihtoehto:

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

Ongelma, jota map ei ratkaise

map säilyttää jokaisen alkion. Jos muunnos palauttaa optionaalin (se voi epäonnistua), tuloksena on optionaaleja sisältävä taulukko, kuten [Int?] — täynnä nil-aukkoja, jotka on suodatettava myöhemmin.

Juuri tämän ongelman compactMap ratkaisee.

compactMap käyttöön

compactMap muuntaa jokaisen alkion ja poistaa kaikki tulokset, jotka ovat nil, joten se palauttaa taulukon, jonka alkiot eivät ole optionaaleja:

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

map ja compactMap rinnakkain

Ero on siinä, säilyvätkö nil-tulokset:

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

Optional-arvojen purkaminen kokoelmassa

compactMap on idiomat­tinen tapa poistaa nil-arvot optionaaleja sisältävästä taulukosta:

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

Jäsentäminen compactMapilla

Yleinen käytännön esimerkki: jäsennä syötteestä vain kelvolliset rivit:

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

mapin ja compactMapin yhdistäminen

Voitte ketjuttaa ne: muotoile data mapilla ja säilytä vain onnistuneet tulokset compactMapilla:

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

compactMap optional-ketjuissa

Se toimii erinomaisesti myös optionaalisen ominaisuuden käytön kanssa:

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"]

Pikakysymys

Mikä funktio muuntaa alkiot ja poistaa nil-tulokset yhdellä kertaa?

Kertaus

Opit kaksi keskeistä muunnosfunktiota:

  • map — muuntaa jokaisen alkion, joten tulosten määrä vastaa lähtöaineiston määrää
  • compactMap — muuntaa alkiot ja poistaa nil-tulokset; sopii erinomaisesti jäsentämiseen ja optional-arvojen purkamiseen
  • Molemmat palauttavat uuden taulukon eivätkä koskaan muuta lähdettä
  • Ketjuta ne, jotta voit muotoilla ja suodattaa dataa selkeästi

Seuraavaksi: suodattaminen predikaateilla.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”map ja compactMap” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “map ja compactMap”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”map ja compactMap”?

Muunna alkioita ja poista nil-arvot. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”map ja compactMap”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. map ja compactMap
  2. filter ja predikaatit
  3. reduce ja reduce(into:)
  4. flatMap ja ketjuttaminen
← Takaisin: Swift Academy