Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Einfach

Lies eine einzelne Eingabezeile: eine kommagetrennte Mischung aus Ganzzahlen und fehlerhaftem Text (einige Einträge können nicht geparst werden).

Gib Folgendes aus:

  1. Die Ganzzahlen (in der Reihenfolge der Eingabe), verbunden mit ,
  2. Wie viele Einträge verworfen wurden (nicht geparst werden konnten)
  3. Die Summe der geparsten Ganzzahlen

Für die Eingabe 3,hi,7,!,1,42,oops ist die Ausgabe:

3,7,1,42
3
53

Spickzettel

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 verworfen

Ohne 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
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