compactMap
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 28 von 56.
compactMap ist map, wobei die Optionals herausgefiltert werden. Die Closure kann ein Optional zurückgeben; compactMap verwirft die nil-Ergebnisse und entpackt den Rest.
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [3, 7, 1]Int("hi") gibt nil zurück, da es keine Zahl aus "hi" parsen kann. compactMap sortiert diese automatisch aus und liefert ein sauberes [Int].
Ohne sie würden Sie strings.map { Int($0) } schreiben und ein [Int?] mit enthaltenen nils erhalten, die Sie dann selbst herausfiltern müssten. compactMap erledigt beide Schritte in einem.
Aufgabe
EinfachLies eine einzelne Eingabezeile: eine kommagetrennte Mischung aus Ganzzahlen und fehlerhaftem Text (einige Einträge können nicht geparst werden).
Gib Folgendes aus:
- Die Ganzzahlen (in der Reihenfolge der Eingabe), verbunden mit
, - Wie viele Einträge verworfen wurden (nicht geparst werden konnten)
- Die Summe der geparsten Ganzzahlen
Für die Eingabe 3,hi,7,!,1,42,oops ist die Ausgabe:
3,7,1,42
3
53Spickzettel
compactMap funktioniert ähnlich wie map, entfernt jedoch automatisch nil-Ergebnisse und entpackt den Rest:
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
// [3, 7, 1] — nils von nicht parsbaren Strings werden verworfenOhne compactMap würde map ein [Int?] mit enthaltenen nils zurückgeben, was einen separaten Filter-Schritt erfordern würde.
Probier es selbst
let parts = readLine()!.components(separatedBy: ",")
// TODO: compactMap zu ints; joined, Anzahl der verworfenen Elemente, Summe 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 TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken3Dictionaries
Dictionaries deklarierenOptionaler LookupDictionaries aktualisierenÜber Dictionaries iterierenWerte gruppierenZusammenfassung – Inventar6Funktionen höherer Ordnung Teil 2
compactMapflatMapsorted(by:)Pipelines erstellenZusammenfassung – Bestenliste