flatMap
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 29 di 56.
flatMap serve nel caso in cui ogni elemento produca diversi risultati. La closure restituisce un array; flatMap li concatena tutti in un unico array piatto.
let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]Puoi svolgere del vero lavoro anche all’interno della closure. Mappare ogni valore a un piccolo array e appiattire il risultato in un solo passaggio è il caso d’uso tipico:
let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]Confrontalo con map: avrebbe prodotto un [[Int]], un array di piccoli array, che avresti dovuto appiattire con un altro passaggio. flatMap combina questi due passaggi in uno solo.
Sfida
FacileLeggi due righe di input:
- Un elenco di numeri interi separati da virgole,
nums - Un elenco di numeri interi separati da virgole,
repeats(della stessa lunghezza dinums)
Per ogni i, ripeti nums[i] esattamente repeats[i] volte. Stampa l'array piatto risultante, unito con ,. Usa flatMap.
Per l'input 5,7,2 sulla riga 1 e 3,1,2 sulla riga 2, l'output è 5,5,5,7,2,2.
Provalo tu
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: trasforma ogni (num, repeat) in Array(repeating:count:) con flatMap; unisci con ","
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle parole3Dizionari
Dichiarare i dizionariRicerca facoltativaAggiornare i dizionariIterare sui dizionariRaggruppare i valoriRipasso - Inventario6Funzioni di ordine superiore Parte 2
compactMapflatMapsorted(by:)Creare pipelineRiepilogo - ClassificaEsercitati da solo: Playground Swift