Menu
Coddy logo textTech

Filter

Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 24 di 56.

filter accetta una closure predicato e restituisce un nuovo array contenente solo gli elementi per i quali la closure ha restituito true.

let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)                 // [2, 4, 6]

Il risultato mantiene l'ordine originale. Il tipo del risultato corrisponde al tipo di input: non avviene alcuna trasformazione, solo una selezione.

filter si concatena naturalmente con map:

let big = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }
print(big)                   // [9, 16, 25, 36]

Leggi ogni catena dall'alto verso il basso, proprio come una pipeline. Ogni passaggio produce un nuovo array; nulla modifica l'originale.

challenge icon

Sfida

Facile

Leggi due righe di input:

  1. Un elenco di numeri interi separati da virgole
  2. Un numero intero min

Stampa, su righe separate:

  1. I numeri interi strettamente maggiori di min, uniti con , (oppure vuoto se nessuno soddisfa il criterio)
  2. I quadrati dei numeri interi che soddisfano il criterio, uniti con ,
  3. Il conteggio dei numeri interi che soddisfano il criterio

Usa filter + map in catena. Non iterare due volte sull'input.

Con 1,5,2,8,3,7 nella riga 1 e 4 nella riga 2, l'output è:

5,8,7
25,64,49
3

Provalo tu

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!

// TODO: applica filter > min una sola volta, poi usa map per ottenere i quadrati; stampa entrambi, poi conta
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