Reduce
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 25 z 56.
reduce sprowadza całą tablicę do jednej wartości. Dzięki niemu możesz sumować, mnożyć, znajdować wartość skrajną lub tworzyć nowy ciąg znaków albo tablicę z wielu elementów.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10Pierwszym argumentem jest początkowy akumulator. Domknięcie otrzymuje bieżący akumulator i następny element, a następnie zwraca nowy akumulator. Końcowa wartość akumulatora jest wynikiem.
W przypadku operatorów arytmetycznych Swift umożliwia stosowanie skróconego zapisu opartego na symbolach:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce nie musi zwracać liczby. Akumulator może być dowolnego typu — to Ty decydujesz:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"Wyzwanie
ŁatwyOdczytaj jeden wiersz wejścia: rozdzieloną przecinkami listę liczb całkowitych. Używając reduce dla każdego z nich, wypisz trzy wiersze:
- Sumę
- Iloczyn
- Największą wartość (użyj domknięcia, które zwraca większy z dwóch argumentów, nie wywołuj
.max())
Załóż, że jest co najmniej jeden element. Aby znaleźć największą wartość, możesz użyć nums[0] jako początkowego akumulatora i zredukować pozostałą część tablicy.
Dla wejścia 3,7,2,8,4 wynikiem jest:
24
1344
8Spróbuj swoich sił
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: oblicz sumę, iloczyn i maksimum za pomocą reduce
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