Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Leggi una singola riga di input: un mix separato da virgole di numeri interi e testo non valido (alcune voci non possono essere analizzate).

Stampa:

  1. I numeri interi (nell’ordine di input), uniti con ,
  2. Quante voci sono state scartate (non potevano essere analizzate)
  3. La somma dei numeri interi analizzati

Per l’input 3,hi,7,!,1,42,oops, l’output è:

3,7,1,42
3
53

Provalo 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
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Swift