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.
Sfida
MedioLeggi 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: 40Provalo tu
let entries = readLine()!.components(separatedBy: ",")
// TODO: pipeline using compactMap (parse), filter (qty > 0),
// sorted (total desc), map (format); print lines + Sum
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