Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

Wczytaj jeden wiersz danych wejściowych: mieszankę liczb całkowitych i niepotrzebnego tekstu, rozdzielonych przecinkami (niektórych wpisów nie da się sparsować).

Wypisz:

  1. Liczby całkowite (w kolejności występowania na wejściu), połączone za pomocą ,
  2. Liczbę pominiętych wpisów (których nie dało się sparsować)
  3. Sumę sparsowanych liczb całkowitych

Dla danych wejściowych 3,hi,7,!,1,42,oops wynikiem jest:

3,7,1,42
3
53

Spró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ę
quiz iconSprawdź się

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

Poćwicz samodzielnie: Edytor online Swift