compactMap
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 28 di 56.
compactMap è map con gli optional filtrati. La closure può restituire un Optional; compactMap scarta i risultati nil e scarta il wrapping degli altri.
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [3, 7, 1]Int("hi") restituisce nil perché non riesce a ricavare un numero da "hi". compactMap li scarta automaticamente e ti restituisce un [Int] senza elementi non validi.
Senza di essa, scriveresti strings.map { Int($0) } e otterresti un [Int?] con dei nil mescolati, poi dovresti filtrarli tu. compactMap esegue entrambi i passaggi in uno.
Sfida
FacileLeggi una singola riga di input: un mix separato da virgole di numeri interi e testo non valido (alcune voci non possono essere analizzate).
Stampa:
- I numeri interi (nell’ordine di input), uniti con
, - Quante voci sono state scartate (non potevano essere analizzate)
- La somma dei numeri interi analizzati
Per l’input 3,hi,7,!,1,42,oops, l’output è:
3,7,1,42
3
53Provalo tu
let parts = readLine()!.components(separatedBy: ",")
// TODO: usa compactMap per convertire in interi; stampa il risultato di joined, il numero di elementi scartati e la somma
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle parole3Dizionari
Dichiarare i dizionariRicerca facoltativaAggiornare i dizionariIterare sui dizionariRaggruppare i valoriRipasso - Inventario6Funzioni di ordine superiore Parte 2
compactMapflatMapsorted(by:)Creare pipelineRiepilogo - ClassificaEsercitati da solo: Playground Swift