compactMap
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 28 z 56.
compactMap to map z odfiltrowanymi wartościami opcjonalnymi. Domknięcie może zwrócić wartość Optional; compactMap odrzuca wyniki nil i rozpakowuje pozostałe.
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [3, 7, 1]Int("hi") zwraca nil, ponieważ nie może odczytać liczby z "hi". compactMap automatycznie je odrzuca i zwraca czystą tablicę [Int].
Bez niego trzeba by napisać strings.map { Int($0) } i otrzymać [Int?] z wartościami nil, a potem samodzielnie je odfiltrować. compactMap wykonuje oba kroki naraz.
Wyzwanie
ŁatwyWczytaj jeden wiersz danych wejściowych: mieszankę liczb całkowitych i niepotrzebnego tekstu, rozdzielonych przecinkami (niektórych wpisów nie da się sparsować).
Wypisz:
- Liczby całkowite (w kolejności występowania na wejściu), połączone za pomocą
, - Liczbę pominiętych wpisów (których nie dało się sparsować)
- Sumę sparsowanych liczb całkowitych
Dla danych wejściowych 3,hi,7,!,1,42,oops wynikiem jest:
3,7,1,42
3
53Spróbuj swoich sił
let parts = readLine()!.components(separatedBy: ",")
// TODO: użyj compactMap do konwersji na liczby całkowite; wypisz połączone wartości, liczbę pominiętych elementów i sumę
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słówPoćwicz samodzielnie: Edytor online Swift