flatMap
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 29 z 56.
flatMap służy do sytuacji, w której każdy element daje kilka wyników. Domknięcie zwraca tablicę; flatMap łączy je wszystkie w jedną płaską tablicę.
let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]Możesz też wykonywać rzeczywistą pracę wewnątrz domknięcia. Typowym przypadkiem użycia jest mapowanie każdej wartości na małą tablicę i spłaszczenie wyniku w jednym kroku:
let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]Porównaj z map: otrzymałbyś w ten sposób [[Int]], czyli tablicę małych tablic, którą trzeba byłoby spłaszczyć w kolejnym kroku. flatMap łączy te dwa kroki w jeden.
Wyzwanie
ŁatwyWczytaj dwa wiersze danych wejściowych:
- Rozdzieloną przecinkami listę liczb całkowitych,
nums - Rozdzieloną przecinkami listę liczb całkowitych,
repeats(tej samej długości conums)
Dla każdego i powtórz nums[i] dokładnie repeats[i] razy. Wypisz wynikową spłaszczoną tablicę, połączoną za pomocą ,. Użyj flatMap.
Dla danych wejściowych 5,7,2 w wierszu 1 i 3,1,2 w wierszu 2 wynikiem jest 5,5,5,7,2,2.
Spróbuj swoich sił
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: przekształć każdą parę (num, repeat) za pomocą flatMap w Array(repeating:count:); połącz separatorem ","
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