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.
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 classementEntraînez-vous par vous-même : Playground Swift