Pipelines erstellen
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy. Lektion 31 von 56.
Die Methoden, die Sie gesammelt haben, map, filter, reduce, compactMap, flatMap, sorted(by:), sind das alltägliche Swift-Toolkit. Echter Code fügt sie zusammen.
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"]Lesen Sie die Kette von oben nach unten: Behalten Sie nicht-leere Bestellungen bei, sortieren Sie absteigend nach der Menge und behalten Sie dann nur die Namen.
Pipelines gewinnen, wenn jeder Schritt einen einzigen Zweck hat. Wenn Sie feststellen, dass Sie zwei Dinge gleichzeitig innerhalb eines Closures tun (Mapping und Filtern), teilen Sie diese in zwei Schritte auf. Die Kette bleibt lesbar, während sie wächst.
Aufgabe
MittelLies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von name:price:qty-Einträgen. Einige Einträge sind fehlerhaft und sollten übersprungen werden: Jeder Eintrag, dessen Preis oder Menge keine gültige Ganzzahl ist.
Erstelle eine Pipeline, die für jeden gültigen Eintrag mit qty > 0 eine Zeile erzeugt, absteigend nach der Gesamtsumme (price * qty) sortiert, im folgenden Format:
<name>: <total>Gib nach den Zeilen für die einzelnen Einträge eine Zusammenfassungszeile aus: Sum: <n> mit der Gesamtsumme.
Für die Eingabe apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7 lautet die Ausgabe:
milk: 20
salt: 14
apple: 6
Sum: 40Probier es selbst
let entries = readLine()!.components(separatedBy: ",")
// TODO: Pipeline mit compactMap (parse), filter (qty > 0),
// sorted (total desc), map (format); Zeilen + Sum ausgeben
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimSuchen in StringsAufteilen und ZusammenfügenTeilstrings ersetzenRückblick – Benutzernamen prüfen4Mengen
Mengen erstellenVereinigung und SchnittmengeSubtraktion und symmetrische DifferenzTeilmenge und ObermengeWiederholung – Tag-Filter7Projekt – Gewohnheitstracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteBereichsmethodenBereiche in SwitchRückblick – Kalender-Raster5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerketten von Map, Filter und ReduceRückblick – Wortstatistik3Wörterbücher
Wörterbücher deklarierenOptionale SucheWörterbücher aktualisierenWörterbücher durchlaufenWerte gruppierenRückblick – Inventar6Funktionen höherer Ordnung Teil 2
compactMapflatMapsorted(by:)Pipelines erstellenRückblick – BestenlisteÜbe selbstständig: Swift-Playground