flatMap
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 29 sur 56.
flatMap est utilisé dans le cas où chaque élément produit plusieurs résultats. La fermeture renvoie un tableau ; flatMap les concatène tous en un seul tableau plat.
let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]Vous pouvez également effectuer un travail réel à l'intérieur de la fermeture. Mapper chaque valeur à un petit tableau et aplatir le résultat en une seule étape est le cas d'utilisation typique :
let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]Comparez avec map : cela aurait produit un [[Int]], un tableau de petits tableaux, ce qui nécessiterait une étape supplémentaire pour l'aplatir. flatMap combine ces deux étapes en une seule.
Défi
FacileLisez deux lignes d'entrée :
- Une liste d'entiers séparés par des virgules, les
nums - Une liste d'entiers séparés par des virgules, les
repeats(de la même longueur quenums)
Pour chaque i, répétez nums[i] exactement repeats[i] fois. Affichez le tableau plat résultant, joint avec ,. Utilisez flatMap.
Pour l'entrée 5,7,2 sur la ligne 1 et 3,1,2 sur la ligne 2, la sortie est 5,5,5,7,2,2.
Aide-mémoire
flatMap mappe chaque élément vers un tableau et concatène tous les résultats en un seul tableau plat :
let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]Contrairement à map (qui produirait [[Int]]), flatMap aplatit en une seule étape. Il peut également aplatir directement des tableaux imbriqués :
let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]Essayez vous-même
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: flatMap chaque (num, repeat) dans Array(repeating:count:); joindre avec ","
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots3Dictionnaires
Déclarer des dictionnairesRecherche optionnelleMettre à jour des dictionnairesParcourir des dictionnairesGrouper des valeursRécapitulatif - Inventaire6Fonctions d'ordre supérieur, partie 2
compactMapflatMapsorted(by:)Construction de pipelinesRécapitulatif - Tableau de classement