map ja compactMap
Muunna alkioita ja poista nil-arvot.
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 droppedmap 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 idiomattinen 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, +)) // 49mapin 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 poistaanil-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.
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
- map ja compactMap
- filter ja predikaatit
- reduce ja reduce(into:)
- flatMap ja ketjuttaminen