Menu
Coddy logo textTech

Funzioni higher-order personalizzate

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

Ora puoi scrivere le tue funzioni di ordine superiore e si integreranno perfettamente con map e filter. La struttura è sempre la stessa: accetta un parametro closure, chiamalo all'interno del ciclo e restituisci il risultato.

extension Array {
    func myMap<T>(_ transform: (Element) -> T) -> [T] {
        var result: [T] = []
        for item in self {
            result.append(transform(item))
        }
        return result
    }
}

[1, 2, 3].myMap { $0 * 10 }       // [10, 20, 30]

Se le estensioni ti sembrano complicate, scrivi invece una funzione libera: l’idea è la stessa:

func count<T>(_ items: [T], where predicate: (T) -> Bool) -> Int {
    var n = 0
    for item in items where predicate(item) {
        n += 1
    }
    return n
}

Una volta che riesci a passare in giro le closure, la libreria standard smette di sembrare magica e inizia a sembrare un insieme di schemi che potresti scrivere da solo.

challenge icon

Sfida

Medio

Scrivi una funzione libera partition(_ items: [Int], by predicate: (Int) -> Bool) -> ([Int], [Int]) che percorra l'array una sola volta e restituisca una tupla (matched, rest): gli elementi che soddisfano il predicato e gli altri, entrambi nell'ordine originale.

Leggi due righe: un intero min, poi un elenco di interi separati da virgole. Usa la tua partition con un predicato che verifica n > min. Stampa:

  1. matched: <...>
  2. rest: <...>

Ogni elenco deve essere unito con , (oppure essere vuoto se non c'è nulla da stampare).

Per l'input 5 / 2,7,3,8,5, l'output è:

matched: 7,8
rest: 2,3,5

Provalo tu

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

// TODO: partition(_:by:) -> ([Int], [Int]); stampa gli elementi corrispondenti e i rimanenti
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