Menu
Coddy logo textTech

Tworzenie potoków

Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 31 z 56.

Metody, które poznałeś: map, filter, reduce, compactMap, flatMap, sorted(by:), to codzienny zestaw narzędzi Swift. W prawdziwym kodzie łączy się je ze sobą.

struct Order {
    let item: String
    let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }
print(names)                  // ["milk", "apple"]

Odczytaj łańcuch od góry do dołu: zachowaj niepuste zamówienia, posortuj je malejąco według ilości, a następnie zachowaj tylko nazwy.

Potoki działają najlepiej, gdy każdy krok ma jeden cel. Jeśli zauważysz, że w domknięciu robisz jednocześnie dwie rzeczy (mapowanie i filtrowanie), podziel je na dwa kroki. Łańcuch pozostaje czytelny, nawet gdy się rozrasta.

challenge icon

Wyzwanie

Średni

Odczytaj jeden wiersz wejścia: listę elementów name:price:qty oddzielonych przecinkami. Niektóre elementy są nieprawidłowe i należy je pominąć: każdy element, którego cena lub ilość nie jest prawidłową liczbą całkowitą.

Zbuduj potok, który tworzy po jednym wierszu dla każdego prawidłowego elementu z qty > 0, posortowanego malejąco według sumy (price * qty), w formacie:

<name>: <total>

Po wierszach z poszczególnymi elementami wypisz jeden wiersz podsumowania: Sum: <n> z łączną sumą.

Dla wejścia apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7 wynikiem jest:

milk: 20
salt: 14
apple: 6
Sum: 40

Spróbuj swoich sił

let entries = readLine()!.components(separatedBy: ",")

// TODO: przetwarzanie potokowe z użyciem compactMap (parsowanie), filter (qty > 0),
// sorted (total malejąco), map (formatowanie); wypisz wiersze + 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