Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Mittel

Lies 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 eine Zeile pro gültigem Eintrag mit qty > 0 erzeugt, sortiert nach der Gesamtsumme (price * qty) absteigend, im Format:

<name>: <total>

Gib nach den zeilenweisen Angaben 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: 40

Spickzettel

Das Verketten von Funktionen höherer Ordnung erzeugt lesbare Pipelines, bei denen jeder Schritt einen einzigen Zweck erfüllt:

let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }

Gängige Pipeline-Methoden: filtercompactMapsorted(by:)mapreduce. Wenn ein Closure zwei Dinge gleichzeitig tut (z. B. Mapping und Filtern), teilen Sie es in zwei Schritte auf.

Probier es selbst

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

// TODO: Pipeline mit compactMap (parse), filter (qty > 0),
// sorted (total desc), map (format); Zeilen + Sum ausgeben
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss