map e compactMap
Trasformi gli elementi ed elimini i nil.
map e compactMap è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Che cos'è map?
map è una funzione di ordine superiore: accetta una closure e la applica a ogni elemento di una sequenza, restituendo un nuovo array contenente i risultati trasformati.
- La collection originale non viene mai modificata
- Il numero di risultati è sempre uguale al numero di elementi in input
- Il tipo degli elementi può cambiare, ad esempio da
IntaString
Un semplice map
Raddoppiare ogni numero in un array:
let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled) // [2, 4, 6, 8]Cambiare il tipo degli elementi
map può trasformare valori Int in valori String:
let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels) // ["ID-10", "ID-20", "ID-30"]map con una funzione con nome
Può passare qualsiasi funzione con una firma compatibile, non soltanto una trailing closure:
let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper) // ["SWIFT", "MAP"]Il problema che map non risolve
map mantiene ogni elemento. Se la trasformazione restituisce un opzionale, perché potrebbe non riuscire, si ritrova con un array di opzionali come [Int?] — pieno di elementi nil da filtrare in seguito.
È esattamente il problema risolto da compactMap.
Ecco compactMap
compactMap trasforma ogni elemento e rimuove ogni risultato che è nil, restituendo un array non opzionale:
let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums) // [1, 2, 4] -- "x" was droppedmap e compactMap a confronto
La differenza sta nel fatto che i risultati nil vengano mantenuti o meno:
let raw = ["1", "x", "3"]
print(raw.map { Int($0) }) // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]Spostare gli opzionali in una collection
compactMap è il modo idiomatico per rimuovere i nil da un array di opzionali:
let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean) // [1, 3, 5]Analizzare i dati con compactMap
Un utilizzo comune nella pratica: analizzare soltanto le righe valide dell'input:
let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values) // [42, 7]
print(values.reduce(0, +)) // 49Combinare map e compactMap
Può concatenarli: usi map per dare forma ai dati e compactMap per conservare soltanto le operazioni riuscite:
let scores = ["90", "85", "n/a", "70"]
let passed = scores
.compactMap { Int($0) }
.map { $0 >= 80 ? "pass" : "fail" }
print(passed) // ["pass", "pass", "fail"]compactMap con catene di opzionali
Funziona bene anche con l'accesso opzionale alle proprietà:
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"]Verifica rapida
Quale funzione trasforma gli elementi e rimuove i risultati nil in un unico passaggio?
Riepilogo
Ha imparato a conoscere le due funzioni fondamentali per la trasformazione:
map— trasforma ogni elemento; il numero di risultati è uguale al numero di elementi in inputcompactMap— trasforma e rimuove inil; è ideale per l'analisi dei dati e per lo spacchettamento degli opzionali- Entrambe restituiscono nuovi array e non modificano mai la sorgente
- Può concatenarle per dare forma ai dati e poi filtrarli in modo chiaro
Prossimo argomento: il filtraggio con i predicati.
Domande Frequenti
La lezione «map e compactMap» è gratuita?
Sì — il testo completo di «map e compactMap» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «map e compactMap»?
Trasformi gli elementi ed elimini i nil. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «map e compactMap»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- map e compactMap
- filter e predicati
- reduce e reduce(into:)
- flatMap e concatenamento