Filter
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 24 von 56.
filter nimmt eine Prädikats-Closure entgegen und gibt ein neues Array zurück, das nur die Elemente enthält, für die die Closure true zurückgegeben hat.
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]Das Ergebnis behält die ursprüngliche Reihenfolge bei. Der Ergebnistyp entspricht dem Eingabetyp, es findet keine Transformation statt, nur eine Auswahl.
filter lässt sich natürlich mit map verketten:
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]Lies jede Kette von oben nach unten, genau wie eine Pipeline. Jeder Schritt erzeugt ein neues Array; nichts verändert das Original.
Aufgabe
EinfachLies zwei Zeilen Eingabe ein:
- Eine durch Kommata getrennte Liste von Ganzzahlen
- Eine Ganzzahl
min
Gib in separaten Zeilen Folgendes aus:
- Die Ganzzahlen, die strikt größer als
minsind, verbunden mit,(oder leer, falls keine zutreffen) - Die Quadrate der zutreffenden Ganzzahlen, verbunden mit
, - Die Anzahl der zutreffenden Ganzzahlen
Verwende filter + map als Kette. Iteriere nicht zweimal über die Eingabe.
Für die Eingabe 1,5,2,8,3,7 in Zeile 1 und 4 in Zeile 2 lautet die Ausgabe:
5,8,7
25,64,49
3Spickzettel
Verwenden Sie filter, um Elemente auszuwählen, die einer Bedingung entsprechen:
let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]Verketten Sie filter mit map als Pipeline:
let result = nums
.filter { $0 > 2 }
.map { $0 * $0 } // [9, 16, 25, 36]Jeder Schritt gibt ein neues Array zurück; das Original bleibt unverändert. Die Reihenfolge bleibt erhalten.
Probier es selbst
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO: einmal nach > min filtern, dann auf Quadrate abbilden; beides ausgeben, dann zählen
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 – Wortstatistiken