Menu
Coddy logo textTech

Creare pipeline

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

I metodi che hai raccolto, map, filter, reduce, compactMap, flatMap, sorted(by:), sono il kit di strumenti Swift di uso quotidiano. Il codice reale li combina.

struct Order {
    let item: String
    let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }
print(names)                  // ["milk", "apple"]

Leggi la catena dall’alto verso il basso: mantieni gli ordini non vuoti, ordinali in ordine decrescente per quantità, poi mantieni solo i nomi.

Le pipeline funzionano meglio quando ogni passaggio ha uno scopo. Se ti ritrovi a fare due cose contemporaneamente all'interno di una closure (mappare e filtrare), suddividile in due passaggi. La catena rimane leggibile man mano che cresce.

challenge icon

Sfida

Medio

Leggi una singola riga di input: un elenco separato da virgole di voci name:price:qty. Alcune voci sono malformate e vanno ignorate: qualsiasi voce il cui prezzo o la cui quantità non sia un numero intero valido.

Crea una pipeline che produca una riga per ogni voce valida con qty > 0, ordinate per totale (price * qty) in ordine decrescente, nel formato:

<name>: <total>

Dopo le righe dei singoli elementi, stampa una riga di riepilogo: Sum: <n> con il totale complessivo.

Per l'input apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7, l'output è:

milk: 20
salt: 14
apple: 6
Sum: 40

Provalo tu

let entries = readLine()!.components(separatedBy: ",")

// TODO: pipeline using compactMap (parse), filter (qty > 0),
// sorted (total desc), map (format); print lines + Sum
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